diff --git a/dashboard.html b/dashboard.html index 472441768..fd976b3bb 100644 --- a/dashboard.html +++ b/dashboard.html @@ -231,7 +231,7 @@

PyAutoMindDashboard

Intent. Priority. Flow.

Every task the Mind is holding. Tap a task's πŸ“‹ and its /start_dev command is on your clipboard β€” paste it into a Claude Code chat to route Claude straight to that task. Recent is the same work by date β€” what has been happening rather than what to do next.

- +

Last updated 2026-09-24. This page is generated from active/, draft/ and the registry files, so it is only as current as they are. dashboard_refresh.yml re-renders it on every push to main β€” that heals a stale page, but not a stale prompt: a task that shipped without its prompt advancing to complete/ keeps rendering here as pickable backlog. Reconciling those is the refresh below.

latent-nan-guard-honest-run β€” planned 2026-07-22

Backlog

-

216 filed prompts, not started β€” sorted most-pickable first (priority, then size). 38 of them belong to an epic and are listed only under Epics below.

+

217 filed prompts, not started β€” sorted most-pickable first (priority, then size). 39 of them belong to an epic and are listed only under Epics below.

bug β€” 66 @@ -1256,7 +1256,7 @@

Epics

-Expectation propagation (EP) campaign β€” 8 queued prompt(s), in order +Expectation propagation (EP) campaign β€” 9 queued prompt(s), in order

Expectation propagation (EP) campaign β€” ledger: draft/research/graphical_ep/ep_campaign.md

Graphical Model Scale-Up β€” ScopingπŸ”¬ researchgraphical_eptoo-largehuman-requiredhigh

@@ -1264,6 +1264,7 @@

Epics

EP: moment-matching projection for the hierarchical scatterβ€¦βœ¨ featureautofitmediumsupervisednormal

+

EP: cut the per-factor-search wrapper overhead…♻️ refactorautofitmediumsupervisedhigh

EP campaign β€” phase map for the 2026 Q3 graphical/EP pushπŸ”¬ researchgraphical_eptoo-largehuman-requiredhigh

Expectation Propagation Scale-Up β€” ScopingπŸ”¬ researchgraphical_eptoo-largehuman-requiredhigh

diff --git a/dashboard.md b/dashboard.md index 6747e07eb..33eba4e1e 100644 --- a/dashboard.md +++ b/dashboard.md @@ -44,7 +44,7 @@ anything you could not verify. | [Human review](#human-review) (`draft/human_review/`) | 2 | | [Parked](#parked) (`parked.md`) | 4 | | [Planned](#planned) (`planned.md`) | 6 | -| [Backlog](#backlog) (`draft/`) | 216 | +| [Backlog](#backlog) (`draft/`) | 217 | > **No batch in flight.** @@ -588,7 +588,7 @@ Scoped but not started; some are not yet prompt files. Full detail in [`planned. ## Backlog -**216** filed prompts, not started. Each section is sorted most-pickable first (priority, then size). **38** of them belong to an epic and are listed only under [Epics](#epics) below. +**217** filed prompts, not started. Each section is sorted most-pickable first (priority, then size). **39** of them belong to an epic and are listed only under [Epics](#epics) below.
bug β€” 66 @@ -2536,7 +2536,7 @@ Continue the 'Cluster strong lensing β€” Source & Cluster arc' epic. Its canonic
-Expectation propagation (EP) campaign β€” 8 queued prompt(s), in order +Expectation propagation (EP) campaign β€” 9 queued prompt(s), in order
πŸ“‹ Expectation propagation (EP) campaign β€” ledger: `draft/research/graphical_ep/ep_campaign.md` @@ -2594,6 +2594,14 @@ Continue the 'Expectation propagation (EP) campaign' epic. Its canonical state l
+
πŸ“‹ EP: cut the per-factor-search wrapper overhead… β€” autofit Β· medium Β· supervised Β· high + +``` +/start_dev draft/refactor/autofit/ep_factor_search_wrapper_overhead.md +``` + +
+
πŸ“‹ EP campaign β€” phase map for the 2026 Q3 graphical/EP push β€” graphical_ep Β· too-large Β· human-required Β· high ``` diff --git a/draft/feature/autofit/ep_hierarchical_scatter_moment_matching.md b/draft/feature/autofit/ep_hierarchical_scatter_moment_matching.md index 768f1a798..831fc736b 100644 --- a/draft/feature/autofit/ep_hierarchical_scatter_moment_matching.md +++ b/draft/feature/autofit/ep_hierarchical_scatter_moment_matching.md @@ -76,3 +76,38 @@ A moment-matching projection option for `_HierarchicalFactor` updates - Mechanism records: `complete/2026/09/ep-prior-id-zero.md`, `ep-message-support.md`, `ep-laplace-hessian.md` - PyAutoFit#1405 (umbrella), #1561 (Hessian), autofit_workspace_test#91 (referee) - README caveat: `PyAutoFit/autofit/graphical/README.md` Β§3.5 + +## 2026-09-24 β€” slope_hierarchy_scale 343299: hierarchical factor 0/50 SUCCESS at N=25 + +RAL job 343299 (PyAutoCortex `projects/slope_hierarchy_scale.md`) completed +2026-09-16 02:03 BST: wall 5h20m, `MAX_STEPS=2`, 25 lenses, JAX-on-CPU, no +pool. It logged 50 "jit compiling vectorized" lines β€” one compile per factor +search (2 steps x 25), confirming `draft/refactor/autofit/ep_analysis_level_compile_cache.md`. +Every dataset factor reached SUCCESS (2/2 each). **The hierarchical factor +never did:** `HierarchicalFactor0` has 50 rows = 27 `BAD_PROJECTION` + 23 +`FAILURE`, zero SUCCESS (`PriorFactor239` and `PriorFactor263` also stale), +and the library's own STALE FACTORS warning fired. The parent recovery printed +exactly the prior: mean 2.0000 Β± 0.7071, sigma 0.5000 Β± 0.3536 (priors +TG(2,1) / TG(0.5,0.5); truth sigma 0.1). + +Under the Laplace optimiser's semantics `BAD_PROJECTION` = the Hessian at the +mode is not finite or not negative-definite (the scale parameter is driven to +a limit) and `FAILURE` = the line search failed and the mean field was handed +back unchanged. This is the Laplace-on-scatter caveat +(`PyAutoFit/autofit/graphical/README.md` Β§3.5, `analytic_gaussian` leg B) at +100 % on the lensing model: per-lens slope widths of 0.002-0.05 are far +tighter than the scatter prior, so the tilted density in sigma sits at the +boundary. The EP arm of campaign phase 3 therefore cannot estimate the slope +scatter with the Laplace projection; this prompt is now the blocking decision +for it (human call, `Autonomy: supervised`). EP output (local): +`output/sample_n25_seed42/ep/expectation_propagation/a7ec60f07f4261afcb98b2adef484199/` +(`ep_history.csv`, `ep_diagnostics.results`). + +Cross-reference β€” `draft/bug/autofit/ep_factors_end_the_run_with_zero.md`: +that bug records a `HierarchicalFactor1` ending with only `BAD_PROJECTION` and +never a SUCCESS on 6/200 leg-B seeds of the analytic toy (seeds 29, 71, 106, +152, 178, 193). The same shape now reproduces at 100 % on a real lensing model +(every hierarchical update over 2 steps x 25 factors), so it is no longer a +rare-seed edge case: whether a zero-SUCCESS hierarchical factor is legitimate +(the bug's open question) and whether moment matching removes it should be +judged together. diff --git a/draft/refactor/autofit/ep_factor_search_wrapper_overhead.md b/draft/refactor/autofit/ep_factor_search_wrapper_overhead.md new file mode 100644 index 000000000..3c35e9967 --- /dev/null +++ b/draft/refactor/autofit/ep_factor_search_wrapper_overhead.md @@ -0,0 +1,88 @@ +# EP: cut the per-factor-search wrapper overhead (redundant second run_nested pass, per-search plots, instance_from_vector fast path) + +Type: refactor +Target: PyAutoFit +Repos: +- PyAutoFit +Themes: +- graphical-ep +Difficulty: medium +Autonomy: supervised +Priority: high +Status: formalised +Consequence: judge +Witness: on the ep_toy_gaussian N=5, max_steps=3 toy, `run_nested` is called once per Dynesty factor search (15 calls for 15 searches, not 30) and per-search wall drops from ~2.45 s to <= 1.5 s at identical parent moments (mean and sigma within 1e-6 of a control run with the same seeds), with the full `test_autofit` suite green run serially. +Review-minutes: 5 +Unattended: ready +Epic: graphical-ep +Filed: 2026-09-24 + +## Why + +Every EP factor update is a full autofit non-linear search. On the +`ep_toy_gaussian` #1405 collapse toy (PyAutoCortex +`projects/ep_toy_gaussian.md`) a 1-parameter Dynesty factor search spends +about as much time in the autofit wrapper as in the sampler. A 1000-search +N=50 repeat carries ~15-20 min of pure overhead; best case on the toy is ~2x. + +Profile (2026-09-24, laptop, PyAutoFit at the RAL mirror a73684012, N=5, +max_steps=3, 15 factor searches, cProfile total 109 s; files in +`ep_factor_search_wrapper_overhead_assets/`): + +- **Per search 2.45 s = ~1.47 s dynesty `run_nested` + ~0.98 s autofit wrapper** + (plots, a redundant second `run_nested` pass, samples writes). +- **Redundant second `run_nested` pass (~5.5 s / 13 %).** 30 `run_nested` + calls for 15 searches. `run_search_internal` + (`autofit/non_linear/search/nest/dynesty/search/abstract.py:413-455`) + returns `finished = total_iterations == iterations_after_run`, which is + never true on a first pass that converges, so every search does a full + `perform_update(during_analysis=True)` + checkpoint restore + a no-op second + `run_nested`. +- **Per-search visuals.** `corner_anesthetic` + `model_fit.png` 7.7 s / 18 %; + `data.png` redrawn every search 2.3 s / 5 % although the data never changes. +- **`instance_from_vector`** (`autofit/mapper/prior_model/abstract.py:990`) + is 57 % of `fitness.call`, i.e. ~25-30 % of `run_nested` for a 1-parameter + model: `autofit/mapper/model.py:30` `cache` 486k calls, + `autofit/mapper/prior_model/attribute_pair.py` wrapper 481k calls, + `prior_model.py:483 _instance_for_arguments` 2.7 s tottime. +- **`truncated_normal.log_partition` / `kl`** call `scipy.stats.norm.cdf` + 18.6k times / 3.45 s β€” use `scipy.special.ndtr` / `log_ndtr`. +- **`manage_quick_update`** 1.8 s while quick-update is disabled (61k calls). +- **`gc.collect` per search** 75 ms (1.78 s over 15). + +## What (phases) + +1. **Dynesty finished-detection fix** so a converged first pass is recognised + and the second `perform_update` + checkpoint restore + `run_nested` is + skipped; unit test that counts `run_nested` calls (mock the sampler) and + asserts one per converged search. +2. **EP factor searches skip per-search visuals** β€” a config switch, default + off under EP (corner/model_fit per search), and `data.png` drawn once per + analysis rather than per search. +3. **Mapper fast path for fixed-structure models** in `instance_from_vector` + (precompute the prior-to-attribute map once per model; bypass the + `cache` / `attribute_pair` wrappers on the hot path). +4. **`ndtr` swap** in `autofit/messages/truncated_normal.py` (and + `mapper/prior/_erf_helpers.py` if it pays) β€” `scipy.special.ndtr` / + `log_ndtr` in place of `scipy.stats.norm.cdf`. Also look at the disabled + `manage_quick_update` early-out and the per-search `gc.collect`. + +Each phase should be measured on the same toy (per-search wall, `run_nested` +call count, parent moments against a same-seed control). + +## Side observation (reproducibility) + +Three runs of `ep_repeat.py --repeat 0` gave parent means 51.86 / 51.33 / +51.61: the repeat seed does not make EP reproducible at a73684012. Known cause +β€” the Laplace refine draws from global `np.random` and depends on variable-id +ordering (PyAutoFit#1352). The witness's "same seeds" control therefore needs +the global RNG seeded (or the #1352 fix) before the 1e-6 moment comparison is +meaningful; if it cannot be made deterministic, compare moments across +matched repeats within their spread and say so. + +## Links + +- Campaign ledger: `draft/research/graphical_ep/ep_campaign.md` (row 1b; phase 6 epic 2, EP profiling) +- Sibling: `draft/refactor/autofit/ep_analysis_level_compile_cache.md` (the JAX recompile per factor search) +- EMFILE fix that preceded this profile: PyAutoFit#1632 (dynesty single-core no pool), #1634 (release factor search internals) +- Evidence: `ep_factor_search_wrapper_overhead_assets/ep_profile_report.txt`, `ep_pstats_cumulative.txt`, `ep_pstats_tottime.txt` (paths shortened: `SP/` = site-packages, `PyAutoFit/`, `STDLIB/`, `SCRATCH/` = the profiling scratch dir) diff --git a/draft/refactor/autofit/ep_factor_search_wrapper_overhead_assets/ep_profile_report.txt b/draft/refactor/autofit/ep_factor_search_wrapper_overhead_assets/ep_profile_report.txt new file mode 100644 index 000000000..6e43421bc --- /dev/null +++ b/draft/refactor/autofit/ep_factor_search_wrapper_overhead_assets/ep_profile_report.txt @@ -0,0 +1,126 @@ +total tottime 109.12s + a_dynesty 7.95s 7.3% + b_likelihood+mapping 21.38s 19.6% + c_search_wrapper+output 22.54s 20.7% + d_ep_maths 6.72s 6.2% + e_other 50.53s 46.3% +e_other top: + numpy 7.91 + scipy 6.60 + stdlib 3.93 + 2.61 + 1.87 + 1.78 + 1.70 + 1.46 + 1.09 + pandas 0.90 + 0.83 + 0.83 + 0.70 + 0.67 + 0.64 +=== TOP 30 cumtime +ncalls tottime percall cumtime percall filename:lineno(function) + 30 0.004 0.000 50.303 1.677 autofit/non_linear/search/nest/dynesty/search/abstract.py:413(run_search_internal) + 30 0.051 0.002 50.124 1.671 SP/dynesty/sampler.py:920(run_nested) + 6691 0.504 0.000 47.989 0.007 SP/dynesty/sampler.py:599(sample) + 6661 0.340 0.000 42.432 0.006 SP/dynesty/sampler.py:413(_new_point) + 55007 0.273 0.000 32.615 0.001 SP/dynesty/sampler.py:399(_get_point_value) + 55007 2.452 0.000 32.287 0.001 SP/dynesty/sampler.py:336(_fill_queue) + 119178 0.587 0.000 26.534 0.000 SP/dynesty/dynesty.py:905(__call__) + 53878 0.352 0.000 24.318 0.000 SP/dynesty/sampling.py:30(sample_unif) + 59589 0.234 0.000 21.877 0.000 SP/dynesty/utils.py:183(__call__) + 61089 0.172 0.000 21.699 0.000 SP/timeout_decorator/timeout_decorator.py:71(new_function) + 61089 0.070 0.000 21.499 0.000 autofit/non_linear/fitness.py:764(__call__) + 61119 0.326 0.000 21.444 0.000 autofit/non_linear/fitness.py:552(call_wrap) + 61119 2.420 0.000 19.277 0.000 autofit/non_linear/fitness.py:351(call) + 62649 0.570 0.000 10.969 0.000 autofit/mapper/prior_model/abstract.py:990(instance_from_vector) + 55007 0.059 0.000 9.304 0.000 SP/dynesty/sampler.py:294(update_bound_if_needed) + 82 0.003 0.000 9.244 0.113 SP/dynesty/nestedsamplers.py:668(update) + 64220 0.446 0.000 9.185 0.000 autofit/mapper/prior_model/abstract.py:1818(instance_for_arguments) + 82 0.006 0.000 9.159 0.112 SP/dynesty/bounding.py:536(update) + 5664/82 0.371 0.000 8.711 0.106 SP/dynesty/bounding.py:1368(_bounding_ellipsoids) + 64220 2.723 0.000 8.020 0.000 autofit/mapper/prior_model/prior_model.py:483(_instance_for_arguments) + 12115 0.796 0.000 6.975 0.001 SP/scipy/special/_logsumexp.py:15(logsumexp) + 10826/11 0.084 0.000 6.492 0.590 SP/matplotlib/text.py:65(_get_text_metrics_with_cache) + 413/6 0.010 0.000 6.491 1.082 SP/matplotlib/text.py:73(_get_text_metrics_with_cache_impl) + 1771/22 0.022 0.000 6.182 0.281 :1349(_find_and_load) + 1729/22 0.017 0.000 6.181 0.281 :1304(_find_and_load_unlocked) + 1677/23 0.014 0.000 6.170 0.268 :911(_load_unlocked) + 1452/23 0.008 0.000 6.168 0.268 :993(exec_module) + 4033/41 0.011 0.000 6.157 0.150 :480(_call_with_frames_removed) + 1407 0.118 0.000 6.018 0.004 SP/matplotlib/axis.py:1276(_update_ticks) +107861/105294 1.460 0.000 5.999 0.000 {built-in method builtins.sum} + + + +=== TOP 30 tottime +ncalls tottime percall cumtime percall filename:lineno(function) + 64220 2.723 0.000 8.020 0.000 autofit/mapper/prior_model/prior_model.py:483(_instance_for_arguments) + 359323 2.614 0.000 2.618 0.000 {method 'reduce' of 'numpy.ufunc' objects} + 55007 2.452 0.000 32.287 0.001 SP/dynesty/sampler.py:336(_fill_queue) + 61119 2.420 0.000 19.277 0.000 autofit/non_linear/fitness.py:351(call) + 506/6 2.100 0.004 4.513 0.752 SP/matplotlib/backends/backend_agg.py:206(get_text_width_height_descent) + 61154 2.087 0.000 2.087 0.000 autofit/example/model.py:65(model_data_from) + 80 1.866 0.023 1.866 0.023 {method 'encode' of 'ImagingEncoder' objects} +485820/482427 1.780 0.000 3.150 0.000 autofit/mapper/model.py:30(cache) + 15 1.780 0.119 1.781 0.119 {built-in method gc.collect} +4117601/4116698 1.704 0.000 2.648 0.000 {built-in method builtins.isinstance} + 242/0 1.633 0.007 0.000 SP/matplotlib/backends/backend_agg.py:185(draw_text) +107861/105294 1.460 0.000 5.999 0.000 {built-in method builtins.sum} +481330/481315 1.398 0.000 5.760 0.000 autofit/mapper/prior_model/attribute_pair.py:6(wrapper) + 12115 1.249 0.000 4.370 0.000 SP/scipy/special/_logsumexp.py:201(_logsumexp) + 284917 1.092 0.000 1.180 0.000 {built-in method numpy.array} + 18598 1.036 0.000 3.452 0.000 SP/scipy/stats/_distn_infrastructure.py:2132(cdf) + 61119 1.025 0.000 1.818 0.000 autofit/non_linear/fitness.py:601(manage_quick_update) + 61119 0.847 0.000 3.571 0.000 autofit/example/analysis.py:152(model_data_1d_from) +1275694/1274269 0.831 0.000 1.329 0.000 {built-in method builtins.getattr} + 122178 0.829 0.000 1.090 0.000 autofit/mapper/prior/_erf_helpers.py:17(_norm_cdf) +2175963/2174688 0.828 0.000 1.618 0.000 {built-in method builtins.hasattr} + 1425 0.799 0.001 2.662 0.002 autofit/non_linear/samples/samples.py:257(parameter_lists) + 12115 0.796 0.000 6.975 0.001 SP/scipy/special/_logsumexp.py:15(logsumexp) + 4466 0.773 0.000 1.092 0.000 SP/matplotlib/lines.py:758(draw) +531330/531060 0.643 0.000 0.665 0.000 {built-in method numpy.asarray} + 33440 0.641 0.000 1.707 0.000 SP/scipy/cluster/vq.py:150(vq) + 42011 0.638 0.000 1.437 0.000 SP/scipy/_lib/array_api_extra/_lib/_at.py:224(_op) + 615536 0.637 0.000 0.810 0.000 autofit/non_linear/samples/sample.py:104(parameter_lists_for_paths) +266403/3600 0.632 0.000 1.608 0.000 STDLIB/copy.py:118(deepcopy) + 1950730 0.620 0.000 0.620 0.000 {method 'append' of 'list' objects} + + + +=== bucket c top cumtime +ncalls tottime percall cumtime percall filename:lineno(function) + 30 0.004 0.000 50.303 1.677 autofit/non_linear/search/nest/dynesty/search/abstract.py:413(run_search_internal) + 59589 0.298 0.000 4.485 0.000 autofit/non_linear/search/nest/dynesty/search/abstract.py:58(prior_transform) + 30 0.001 0.000 4.236 0.141 autofit/non_linear/search/updater.py:195(_save_samples) + 1470/510 0.009 0.000 3.303 0.006 autofit/non_linear/samples/interface.py:38(wrapper) + 60 0.007 0.000 2.707 0.045 autofit/non_linear/search/abstract_search.py:1572(samples_from) + 60 0.032 0.001 2.700 0.045 autofit/non_linear/search/nest/dynesty/search/abstract.py:329(samples_via_internal_from) + 60 0.003 0.000 2.690 0.045 autofit/non_linear/samples/pdf.py:56(summary) + 1290 0.036 0.000 2.673 0.002 autofit/non_linear/samples/samples.py:286(parameters_extract) + 1425 0.799 0.001 2.662 0.002 autofit/non_linear/samples/samples.py:257(parameter_lists) + 450 0.027 0.000 2.233 0.005 autofit/non_linear/samples/pdf.py:152(values_at_sigma) + 120 0.001 0.000 1.896 0.016 autofit/non_linear/samples/pdf.py:235(errors_at_sigma) + 30 0.000 0.000 1.146 0.038 autofit/non_linear/paths/directory.py:303(save_samples) + + + +=== bucket d top cumtime +ncalls tottime percall cumtime percall filename:lineno(function) + 36 0.002 0.000 4.149 0.115 autofit/graphical/laplace/optimiser.py:365(optimise) + 36 0.001 0.000 4.147 0.115 autofit/graphical/laplace/optimiser.py:272(optimise_approx) + 36 0.000 0.000 3.297 0.092 autofit/graphical/laplace/optimiser.py:158(optimise_state) + 36 0.004 0.000 3.297 0.092 autofit/graphical/laplace/newton.py:309(optimise_quasi_newton) + 182 0.003 0.000 2.966 0.016 autofit/graphical/laplace/newton.py:219(take_quasi_newton_step) + 182 0.002 0.000 2.749 0.015 autofit/graphical/laplace/line_search.py:380(line_search) + 143 0.001 0.000 2.565 0.018 autofit/graphical/mean_field.py:435(kl) + 1144 0.009 0.000 2.561 0.002 autofit/graphical/mean_field.py:447() + 1001 0.044 0.000 2.520 0.003 autofit/messages/truncated_normal.py:312(kl) + 1325 0.002 0.000 2.517 0.002 autofit/graphical/laplace/line_search.py:148(gradient) + 412 0.008 0.000 2.512 0.006 autofit/graphical/laplace/line_search.py:154(value_gradient) + 412 0.017 0.000 2.504 0.006 autofit/graphical/mean_field.py:735(func_gradient) + + + diff --git a/draft/refactor/autofit/ep_factor_search_wrapper_overhead_assets/ep_pstats_cumulative.txt b/draft/refactor/autofit/ep_factor_search_wrapper_overhead_assets/ep_pstats_cumulative.txt new file mode 100644 index 000000000..a194203ce --- /dev/null +++ b/draft/refactor/autofit/ep_factor_search_wrapper_overhead_assets/ep_pstats_cumulative.txt @@ -0,0 +1,410 @@ +Thu Sep 24 14:49:27 2026 ep.prof + + 51419624 function calls (50728443 primitive calls) in 109.119 seconds + + Ordered by: cumulative time + List reduced from 10814 to 400 due to restriction <400> + + ncalls tottime percall cumtime percall filename:lineno(function) + 30 0.004 0.000 50.303 1.677 PyAutoFit/autofit/non_linear/search/nest/dynesty/search/abstract.py:413(run_search_internal) + 30 0.051 0.002 50.124 1.671 SP/dynesty/sampler.py:920(run_nested) + 6691 0.504 0.000 47.989 0.007 SP/dynesty/sampler.py:599(sample) + 6661 0.340 0.000 42.432 0.006 SP/dynesty/sampler.py:413(_new_point) + 55007 0.273 0.000 32.615 0.001 SP/dynesty/sampler.py:399(_get_point_value) + 55007 2.452 0.000 32.287 0.001 SP/dynesty/sampler.py:336(_fill_queue) + 119178 0.587 0.000 26.534 0.000 SP/dynesty/dynesty.py:905(__call__) + 53878 0.352 0.000 24.318 0.000 SP/dynesty/sampling.py:30(sample_unif) + 59589 0.234 0.000 21.877 0.000 SP/dynesty/utils.py:183(__call__) + 61089 0.172 0.000 21.699 0.000 SP/timeout_decorator/timeout_decorator.py:71(new_function) + 61089 0.070 0.000 21.499 0.000 PyAutoFit/autofit/non_linear/fitness.py:764(__call__) + 61119 0.326 0.000 21.444 0.000 PyAutoFit/autofit/non_linear/fitness.py:552(call_wrap) + 61119 2.420 0.000 19.277 0.000 PyAutoFit/autofit/non_linear/fitness.py:351(call) + 62649 0.570 0.000 10.969 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:990(instance_from_vector) + 55007 0.059 0.000 9.304 0.000 SP/dynesty/sampler.py:294(update_bound_if_needed) + 82 0.003 0.000 9.244 0.113 SP/dynesty/nestedsamplers.py:668(update) + 64220 0.446 0.000 9.185 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1818(instance_for_arguments) + 82 0.006 0.000 9.159 0.112 SP/dynesty/bounding.py:536(update) + 5664/82 0.371 0.000 8.711 0.106 SP/dynesty/bounding.py:1368(_bounding_ellipsoids) + 64220 2.723 0.000 8.020 0.000 PyAutoFit/autofit/mapper/prior_model/prior_model.py:483(_instance_for_arguments) + 12115 0.796 0.000 6.975 0.001 SP/scipy/special/_logsumexp.py:15(logsumexp) + 10826/11 0.084 0.000 6.492 0.590 SP/matplotlib/text.py:65(_get_text_metrics_with_cache) + 413/6 0.010 0.000 6.491 1.082 SP/matplotlib/text.py:73(_get_text_metrics_with_cache_impl) + 1771/22 0.022 0.000 6.182 0.281 :1349(_find_and_load) + 1729/22 0.017 0.000 6.181 0.281 :1304(_find_and_load_unlocked) + 1677/23 0.014 0.000 6.170 0.268 :911(_load_unlocked) + 1452/23 0.008 0.000 6.168 0.268 :993(exec_module) + 4033/41 0.011 0.000 6.157 0.150 :480(_call_with_frames_removed) + 1407 0.118 0.000 6.018 0.004 SP/matplotlib/axis.py:1276(_update_ticks) +107861/105294 1.460 0.000 5.999 0.000 {built-in method builtins.sum} + 9661 0.211 0.000 5.887 0.001 SP/dynesty/utils.py:1338(progress_integration) +481330/481315 1.398 0.000 5.760 0.000 PyAutoFit/autofit/mapper/prior_model/attribute_pair.py:6(wrapper) + 793/110 0.003 0.000 5.571 0.051 {built-in method builtins.__import__} + 61119 0.577 0.000 5.403 0.000 PyAutoFit/autofit/example/analysis.py:121(log_likelihood_function) + 506/6 2.100 0.004 4.513 0.752 SP/matplotlib/backends/backend_agg.py:206(get_text_width_height_descent) + 59589 0.298 0.000 4.485 0.000 PyAutoFit/autofit/non_linear/search/nest/dynesty/search/abstract.py:58(prior_transform) + 12115 1.249 0.000 4.370 0.000 SP/scipy/special/_logsumexp.py:201(_logsumexp) + 61089 0.404 0.000 4.259 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:838(vector_from_unit_vector) + 30 0.001 0.000 4.236 0.141 PyAutoFit/autofit/non_linear/search/updater.py:195(_save_samples) + 5664 0.334 0.000 4.182 0.001 SP/dynesty/bounding.py:1291(bounding_ellipsoid) + 36 0.002 0.000 4.149 0.115 PyAutoFit/autofit/graphical/laplace/optimiser.py:365(optimise) + 36 0.001 0.000 4.147 0.115 PyAutoFit/autofit/graphical/laplace/optimiser.py:272(optimise_approx) +257983/256914 0.362 0.000 3.929 0.000 :1390(_handle_fromlist) + 1339 0.015 0.000 3.915 0.003 SP/matplotlib/axis.py:1585(_get_tick) + 61119 0.847 0.000 3.571 0.000 PyAutoFit/autofit/example/analysis.py:152(model_data_1d_from) + 155 0.002 0.000 3.535 0.023 SP/matplotlib/axes/_base.py:1445(clear) + 155 0.033 0.000 3.532 0.023 SP/matplotlib/axes/_base.py:1313(__clear) + 1129 0.009 0.000 3.478 0.003 SP/dynesty/sampling.py:95(sample_rwalk) + 1129 0.070 0.000 3.466 0.003 SP/dynesty/sampling.py:154(generic_random_walk) + 18598 1.036 0.000 3.452 0.000 SP/scipy/stats/_distn_infrastructure.py:2132(cdf) + 1470/510 0.009 0.000 3.303 0.006 PyAutoFit/autofit/non_linear/samples/interface.py:38(wrapper) + 36 0.000 0.000 3.297 0.092 PyAutoFit/autofit/graphical/laplace/optimiser.py:158(optimise_state) + 36 0.004 0.000 3.297 0.092 PyAutoFit/autofit/graphical/laplace/newton.py:309(optimise_quasi_newton) + 1 0.000 0.000 3.243 3.243 SP/anesthetic/__init__.py:1() +485820/482427 1.780 0.000 3.150 0.000 PyAutoFit/autofit/mapper/model.py:30(cache) + 110 0.003 0.000 3.130 0.028 SP/matplotlib/figure.py:651(add_subplot) + 110 0.026 0.000 3.120 0.028 SP/matplotlib/axes/_base.py:615(__init__) + 1 0.000 0.000 3.097 3.097 SP/anesthetic/samples.py:1() + 2986/4 0.091 0.000 3.048 0.762 SP/matplotlib/text.py:926(get_window_extent) + 1339 0.135 0.000 2.990 0.002 SP/matplotlib/axis.py:59(__init__) + 182 0.003 0.000 2.966 0.016 PyAutoFit/autofit/graphical/laplace/newton.py:219(take_quasi_newton_step) + 4836/4 0.384 0.000 2.953 0.738 SP/matplotlib/text.py:358(_get_layout) + 3344 0.047 0.000 2.786 0.001 SP/scipy/_lib/_util.py:291(wrapper) + 61089 0.156 0.000 2.768 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:859() + 182 0.002 0.000 2.749 0.015 PyAutoFit/autofit/graphical/laplace/line_search.py:380(line_search) + 3344 0.605 0.000 2.739 0.001 SP/scipy/cluster/vq.py:648(kmeans2) + 60 0.007 0.000 2.707 0.045 PyAutoFit/autofit/non_linear/search/abstract_search.py:1572(samples_from) + 60 0.032 0.001 2.700 0.045 PyAutoFit/autofit/non_linear/search/nest/dynesty/search/abstract.py:329(samples_via_internal_from) + 60 0.003 0.000 2.690 0.045 PyAutoFit/autofit/non_linear/samples/pdf.py:56(summary) + 1290 0.036 0.000 2.673 0.002 PyAutoFit/autofit/non_linear/samples/samples.py:286(parameters_extract) + 1425 0.799 0.001 2.662 0.002 PyAutoFit/autofit/non_linear/samples/samples.py:257(parameter_lists) +4117601/4116698 1.704 0.000 2.648 0.000 {built-in method builtins.isinstance} + 1467 0.013 0.000 2.640 0.002 SP/matplotlib/axis.py:1644(get_major_ticks) +4075/2105 0.015 0.000 2.625 0.001 PyAutoNerves/autonerves/tools/decorators.py:18(__get__) + 359323 2.614 0.000 2.618 0.000 {method 'reduce' of 'numpy.ufunc' objects} + 61089 0.379 0.000 2.596 0.000 PyAutoFit/autofit/mapper/prior/truncated_gaussian.py:147(value_for) + 143 0.001 0.000 2.565 0.018 PyAutoFit/autofit/graphical/mean_field.py:435(kl) + 1144 0.009 0.000 2.561 0.002 PyAutoFit/autofit/graphical/mean_field.py:447() + 1001 0.044 0.000 2.520 0.003 PyAutoFit/autofit/messages/truncated_normal.py:312(kl) + 1325 0.002 0.000 2.517 0.002 PyAutoFit/autofit/graphical/laplace/line_search.py:148(gradient) + 412 0.008 0.000 2.512 0.006 PyAutoFit/autofit/graphical/laplace/line_search.py:154(value_gradient) + 30 0.003 0.000 2.509 0.084 SP/anesthetic/plot.py:686(make_2d_axes) + 412 0.017 0.000 2.504 0.006 PyAutoFit/autofit/graphical/mean_field.py:735(func_gradient) + 182 0.005 0.000 2.477 0.014 PyAutoFit/autofit/graphical/laplace/line_search.py:258(line_search_wolfe1) + 30 0.002 0.000 2.456 0.082 SP/anesthetic/plot.py:199(__init__) + 182 0.005 0.000 2.446 0.013 SP/scipy/optimize/_linesearch.py:100(scalar_search_wolfe1) + 182 0.006 0.000 2.438 0.013 SP/scipy/optimize/_dcsrch.py:201(__call__) + 135/45 0.002 0.000 2.425 0.054 SP/matplotlib/_api/deprecation.py:442(wrapper) + 45 0.001 0.000 2.425 0.054 SP/matplotlib/pyplot.py:3261(errorbar) + 6202 0.119 0.000 2.322 0.000 PyAutoFit/autofit/messages/truncated_normal.py:29(log_partition) + 151 0.006 0.000 2.239 0.015 PyAutoFit/autofit/graphical/expectation_propagation/ep_mean_field.py:309(log_evidence) + 450 0.027 0.000 2.233 0.005 PyAutoFit/autofit/non_linear/samples/pdf.py:152(values_at_sigma) + 30 0.008 0.000 2.230 0.074 SP/anesthetic/plot.py:260(_axes_frame) + 51 0.004 0.000 2.176 0.043 PyAutoFit/autofit/graphical/expectation_propagation/diagnostics.py:112(snapshot) + 151 0.010 0.000 2.132 0.014 PyAutoFit/autofit/graphical/expectation_propagation/ep_mean_field.py:295(variable_evidence) + 1057 0.014 0.000 2.105 0.002 PyAutoFit/autofit/messages/abstract.py:327(log_normalisation) + 61154 2.087 0.000 2.087 0.000 PyAutoFit/autofit/example/model.py:65(model_data_from) + 78 0.006 0.000 1.967 0.025 SP/matplotlib/image.py:1526(imsave) + 675 0.022 0.000 1.953 0.003 SP/matplotlib/axis.py:428(__init__) + 664 0.022 0.000 1.947 0.003 SP/matplotlib/axis.py:367(__init__) + 78 0.005 0.000 1.933 0.025 SP/PIL/Image.py:2469(save) + 78 0.006 0.000 1.904 0.024 SP/PIL/PngImagePlugin.py:1304(_save) + 120 0.001 0.000 1.896 0.016 PyAutoFit/autofit/non_linear/samples/pdf.py:235(errors_at_sigma) + 78 0.002 0.000 1.890 0.024 SP/PIL/ImageFile.py:624(_save) + 78 0.002 0.000 1.886 0.024 SP/PIL/ImageFile.py:652(_encode_tile) + 620 0.003 0.000 1.881 0.003 SP/matplotlib/axis.py:534(__get__) + 80 1.866 0.023 1.866 0.023 {method 'encode' of 'ImagingEncoder' objects} + 61089 0.354 0.000 1.864 0.000 PyAutoFit/autofit/mapper/prior/_erf_helpers.py:35(truncated_normal_value_for) + 61119 1.025 0.000 1.818 0.000 PyAutoFit/autofit/non_linear/fitness.py:601(manage_quick_update) + 412 0.009 0.000 1.798 0.004 PyAutoFit/autofit/graphical/factor_graphs/factor.py:373(_jvp_func_jacobian) + 15 1.780 0.119 1.781 0.119 {built-in method gc.collect} + 400 0.030 0.000 1.747 0.004 SP/matplotlib/axis.py:1115(set_clip_path) + 455 0.002 0.000 1.737 0.004 PyAutoFit/autofit/graphical/laplace/line_search.py:216(derphi) + 1763 0.019 0.000 1.722 0.001 PyAutoFit/autofit/graphical/factor_graphs/abstract.py:267(_factor_args) + 33440 0.641 0.000 1.707 0.000 SP/scipy/cluster/vq.py:150(vq) + 1015 0.057 0.000 1.698 0.002 SP/scipy/stats/_distn_infrastructure.py:1148(stats) + 406 0.057 0.000 1.640 0.004 PyAutoFit/autofit/graphical/factor_graphs/abstract.py:270(_numerical_factor_jacobian) +2175963/2174688 0.828 0.000 1.618 0.000 {built-in method builtins.hasattr} + 255 0.005 0.000 1.609 0.006 PyAutoFit/autofit/graphical/expectation_propagation/ep_mean_field.py:266(mean_field) + 28517 0.355 0.000 1.608 0.000 SP/matplotlib/artist.py:1190(_update_props) +266403/3600 0.632 0.000 1.608 0.000 STDLIB/copy.py:118(deepcopy) + 1 0.000 0.000 1.601 1.601 SP/anesthetic/utils.py:1() + 357 0.012 0.000 1.601 0.004 PyAutoFit/autofit/graphical/mean_field.py:314(prod) + 3030 0.086 0.000 1.598 0.001 SP/dynesty/sampler.py:447(add_live_points) + 1571 0.034 0.000 1.594 0.001 PyAutoFit/autofit/graphical/declarative/factor/hierarchical.py:126(__call__) + 480 0.049 0.000 1.528 0.003 SP/dynesty/sampler.py:228(results) + 12016 0.247 0.000 1.523 0.000 SP/scipy/_lib/_util.py:1149(wrapper) + 42011 0.080 0.000 1.517 0.000 SP/scipy/_lib/array_api_extra/_lib/_at.py:362(set) + 1015 0.023 0.000 1.516 0.001 SP/scipy/stats/_continuous_distns.py:10420(_stats) + 2790 0.034 0.000 1.497 0.001 SP/matplotlib/ticker.py:2228(__call__) + 20658 0.221 0.000 1.485 0.000 SP/scipy/stats/_distn_infrastructure.py:612(argsreduce) + 109486 0.427 0.000 1.471 0.000 SP/numpy/_core/fromnumeric.py:69(_wrapreduction) + 4358 0.200 0.000 1.459 0.000 SP/matplotlib/lines.py:301(__init__) + 240 0.001 0.000 1.442 0.006 SP/matplotlib/pyplot.py:2782(gca) +14356/6142 0.159 0.000 1.442 0.000 STDLIB/copy.py:217(_deepcopy_dict) + 42011 0.638 0.000 1.437 0.000 SP/scipy/_lib/array_api_extra/_lib/_at.py:224(_op) + 1947 0.015 0.000 1.394 0.001 PyAutoFit/autofit/graphical/utils.py:493(prod) + 1 0.000 0.000 1.389 1.389 SP/pandas/__init__.py:1() +3491/3389 0.089 0.000 1.385 0.000 {built-in method builtins.__build_class__} + 24566 0.035 0.000 1.362 0.000 SP/matplotlib/artist.py:1228(_internal_update) + 240 0.001 0.000 1.361 0.006 SP/matplotlib/figure.py:1715(gca) + 153968 0.338 0.000 1.358 0.000 SP/numpy/_core/fromnumeric.py:51(_wrapfunc) + 19483 0.040 0.000 1.351 0.000 SP/matplotlib/artist.py:146() + 5938 0.277 0.000 1.332 0.000 SP/dynesty/bounding.py:1215(improve_covar_mat) +1275694/1274269 0.831 0.000 1.329 0.000 {built-in method builtins.getattr} + 2148 0.052 0.000 1.313 0.001 {built-in method _functools.reduce} + 19483 0.050 0.000 1.310 0.000 SP/matplotlib/artist.py:1239(set) + 2790 0.030 0.000 1.309 0.000 SP/matplotlib/ticker.py:2232(tick_values) + 469 0.022 0.000 1.280 0.003 SP/matplotlib/spines.py:142(get_window_extent) + 159 0.006 0.000 1.271 0.008 SP/matplotlib/axis.py:2438(_update_label_position) + 26292 0.147 0.000 1.256 0.000 PyAutoFit/autofit/messages/abstract.py:204(__mul__) + 310 0.011 0.000 1.189 0.004 SP/matplotlib/axis.py:845(clear) + 1407 0.057 0.000 1.183 0.001 SP/matplotlib/axis.py:1527(get_minorticklocs) + 284917 1.092 0.000 1.180 0.000 {built-in method numpy.array} + 53894 0.287 0.000 1.170 0.000 SP/numpy/_core/numeric.py:2195(identity) + 30 0.000 0.000 1.146 0.038 PyAutoFit/autofit/non_linear/paths/directory.py:303(save_samples) + 30 0.002 0.000 1.146 0.038 PyAutoFit/autofit/non_linear/paths/directory.py:309(_save_samples) + 1 0.001 0.001 1.135 1.135 SP/scipy/stats/__init__.py:1() +31199/28231 0.167 0.000 1.133 0.000 STDLIB/copy.py:247(_reconstruct) + 2790 0.213 0.000 1.130 0.000 SP/matplotlib/ticker.py:2159(_raw_ticks) + 1016 0.005 0.000 1.123 0.001 SP/numpy/lib/_function_base_impl.py:2517(__call__) + 5679 0.192 0.000 1.122 0.000 SP/dynesty/bounding.py:115(__init__) + 123 0.001 0.000 1.121 0.009 SP/matplotlib/figure.py:3235(clear) + 123 0.002 0.000 1.120 0.009 SP/matplotlib/figure.py:972(clear) + 45 0.000 0.000 1.120 0.025 SP/matplotlib/pyplot.py:1220(clf) + 3693 0.027 0.000 1.119 0.000 SP/matplotlib/text.py:104(__init__) + 1015 0.008 0.000 1.118 0.001 SP/numpy/lib/_function_base_impl.py:2487(_call_as_normal) + 1015 0.027 0.000 1.110 0.001 SP/numpy/lib/_function_base_impl.py:2593(_vectorize_call) + 661 0.003 0.000 1.100 0.002 SP/scipy/_lib/_docscrape.py:579(__init__) + 4466 0.773 0.000 1.092 0.000 SP/matplotlib/lines.py:758(draw) + 122178 0.829 0.000 1.090 0.000 PyAutoFit/autofit/mapper/prior/_erf_helpers.py:17(_norm_cdf) + 11891 0.500 0.000 1.088 0.000 SP/scipy/linalg/_decomp.py:284(eigh) + 30 0.004 0.000 1.083 0.036 SP/anesthetic/samples.py:189(plot_2d) + 1360 0.021 0.000 1.061 0.001 SP/matplotlib/axis.py:946(set_tick_params) + 4077 0.007 0.000 1.049 0.000 PyAutoFit/autofit/messages/abstract.py:344() + 390 0.011 0.000 1.042 0.003 PyAutoFit/autofit/non_linear/samples/pdf.py:139(median_pdf) + 2030 0.098 0.000 1.023 0.001 SP/scipy/stats/_continuous_distns.py:10423(_truncnorm_stats_scalar) + 1 0.000 0.000 1.018 1.018 ep_repeat.py:81(dynesty_rstate) + 97/52 0.003 0.000 1.015 0.020 SP/matplotlib/__init__.py:1521(inner) + 1 0.000 0.000 1.014 1.014 SP/dynesty/__init__.py:1() + 1 0.000 0.000 1.009 1.009 SP/dynesty/dynesty.py:1() + 1 0.000 0.000 1.005 1.005 SP/dynesty/nestedsamplers.py:1() + 1 0.000 0.000 1.003 1.003 SP/dynesty/sampler.py:1() + 58830 0.186 0.000 0.997 0.000 SP/numpy/_core/fromnumeric.py:2338(sum) + 1 0.001 0.001 0.992 0.992 SP/matplotlib/pyplot.py:1() + 9266 0.022 0.000 0.991 0.000 SP/matplotlib/markers.py:220(__init__) + 637 0.013 0.000 0.987 0.002 PyAutoFit/autofit/graphical/factor_graphs/factor.py:318(__call__) + 60 0.056 0.001 0.983 0.016 PyAutoFit/autofit/mapper/prior_model/abstract.py:2196(log_prior_list_from) + 45 0.015 0.000 0.981 0.022 SP/matplotlib/axes/_axes.py:3515(errorbar) + 32613 0.197 0.000 0.980 0.000 SP/numpy/lib/_stride_tricks_impl.py:481(broadcast_arrays) +96889/90249 0.115 0.000 0.979 0.000 {built-in method builtins.next} + 508 0.011 0.000 0.978 0.002 SP/scipy/_lib/_array_api.py:840(decorator) + 669 0.008 0.000 0.972 0.001 SP/scipy/_lib/_docscrape.py:140(__init__) + 139/102 0.001 0.000 0.969 0.009 SP/pyparsing/core.py:5230(parseImpl) + 293313 0.578 0.000 0.968 0.000 PyAutoFit/autofit/mapper/prior_model/attribute_pair.py:8() + 273/104 0.002 0.000 0.968 0.009 SP/pyparsing/core.py:5119(parseImpl) + 2639 0.022 0.000 0.966 0.000 PyAutoFit/autofit/messages/interface.py:59(logpdf) + 1379 0.007 0.000 0.966 0.001 PyAutoFit/autofit/graphical/laplace/line_search.py:140(value) + 4237 0.050 0.000 0.959 0.000 SP/matplotlib/font_manager.py:1293(findfont) + 301 0.007 0.000 0.959 0.003 PyAutoFit/autofit/graphical/mean_field.py:724(__call__) + 5724 0.324 0.000 0.954 0.000 SP/numpy/lib/_function_base_impl.py:2680(cov) + 120 0.002 0.000 0.954 0.008 PyAutoFit/autofit/non_linear/samples/pdf.py:281(errors_at_lower_sigma) + 300 0.004 0.000 0.941 0.003 PyAutoFit/autofit/graphical/laplace/line_search.py:212(phi) + 120 0.002 0.000 0.940 0.008 PyAutoFit/autofit/non_linear/samples/pdf.py:257(errors_at_upper_sigma) + 51 0.001 0.000 0.934 0.018 PyAutoFit/autofit/graphical/expectation_propagation/history.py:232(__call__) + 62949 0.120 0.000 0.933 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1955(prior_count) + 41 0.000 0.000 0.931 0.023 PyAutoFit/autofit/graphical/expectation_propagation/history.py:283(is_converged) + 41 0.000 0.000 0.930 0.023 PyAutoFit/autofit/graphical/expectation_propagation/history.py:263(is_kl_converged) + 17 0.001 0.000 0.930 0.055 PyAutoFit/autofit/graphical/expectation_propagation/history.py:166(kl_divergences) + 41 0.000 0.000 0.929 0.023 PyAutoFit/autofit/graphical/expectation_propagation/history.py:28(wrapper) + 41 0.000 0.000 0.929 0.023 PyAutoFit/autofit/graphical/expectation_propagation/history.py:131(kl_divergence) + 766957 0.353 0.000 0.924 0.000 :117(__instancecheck__) + 1 0.000 0.000 0.916 0.916 SP/pandas/core/api.py:1() + 1452 0.023 0.000 0.913 0.001 :1066(get_code) + 9266 0.061 0.000 0.912 0.000 SP/matplotlib/markers.py:299(_set_marker) + 30 0.012 0.000 0.905 0.030 PyAutoFit/autofit/non_linear/samples/samples.py:322(write_table) + 1 0.000 0.000 0.903 0.903 PyAutoFit/autofit/graphical/expectation_propagation/history.py:320(kl_divergences) + 30 0.002 0.000 0.894 0.030 PyAutoFit/autofit/non_linear/search/nest/dynesty/search/static.py:113(search_internal_from) + 6427 0.052 0.000 0.885 0.000 PyAutoFit/autofit/messages/interface.py:275(sum_natural_parameters) + 63647 0.226 0.000 0.881 0.000 SP/numpy/_core/fromnumeric.py:89(_wrapreduction_any_all) + 30 0.001 0.000 0.864 0.029 SP/matplotlib/axes/_base.py:4617(twinx) + 136 0.011 0.000 0.854 0.006 SP/matplotlib/artist.py:158(_update_set_signature_and_docstring) + 340 0.005 0.000 0.852 0.003 SP/matplotlib/axes/_base.py:3318(grid) + 680 0.007 0.000 0.847 0.001 SP/matplotlib/axis.py:1696(grid) + 135 0.002 0.000 0.846 0.006 SP/matplotlib/artist.py:125(__init_subclass__) + 719 0.013 0.000 0.844 0.001 SP/matplotlib/axis.py:1606(_copy_tick_props) + 12145 0.270 0.000 0.843 0.000 SP/scipy/_lib/_array_api.py:524(xp_promote) + 81902 0.320 0.000 0.841 0.000 SP/numpy/_core/numerictypes.py:381(isdtype) + 1767 0.009 0.000 0.838 0.000 SP/matplotlib/axis.py:1523(get_majorticklocs) + 615536 0.637 0.000 0.810 0.000 PyAutoFit/autofit/non_linear/samples/sample.py:104(parameter_lists_for_paths) +14012/11470 0.026 0.000 0.810 0.000 STDLIB/copy.py:191(_deepcopy_list) + 30 0.001 0.000 0.805 0.027 SP/matplotlib/axes/_base.py:4595(_make_twin_axes) + 8120 0.098 0.000 0.799 0.000 SP/scipy/_lib/array_api_extra/_lib/_funcs.py:60(apply_where) + 32644 0.095 0.000 0.796 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1533(log_prior_list_from_vector) + 30 0.018 0.001 0.790 0.026 PyAutoFit/autofit/text/formatter.py:226(write_table) + 30 0.001 0.000 0.773 0.026 PyAutoFit/autofit/non_linear/search/updater.py:296(_profile_and_summarize) + 45 0.006 0.000 0.767 0.017 SP/matplotlib/axes/_axes.py:1190(vlines) + 64463 0.262 0.000 0.762 0.000 SP/numpy/_core/fromnumeric.py:1251(argmax) + 31 0.194 0.006 0.758 0.024 SP/matplotlib/font_manager.py:1453(_findfont_cached) + 30 0.002 0.000 0.752 0.025 PyAutoFit/autofit/non_linear/paths/abstract.py:620(save_summary) + 2230 0.020 0.000 0.743 0.000 SP/matplotlib/lines.py:1352(update_from) + 669 0.024 0.000 0.739 0.001 SP/scipy/_lib/_docscrape.py:388(_parse) + 35 0.001 0.000 0.738 0.021 PyAutoFit/autofit/graphical/laplace/optimiser.py:190(make_mode_hessian) + 54168 0.570 0.000 0.734 0.000 SP/numpy/lib/_twodim_base_impl.py:163(eye) + 28581 0.567 0.000 0.734 0.000 SP/numpy/lib/_stride_tricks_impl.py:340(_broadcast_to) + 15 0.005 0.000 0.733 0.049 PyAutoFit/autofit/non_linear/search/nest/dynesty/search/abstract.py:508(live_points_init_from) + 35 0.004 0.000 0.728 0.021 PyAutoFit/autofit/graphical/laplace/newton.py:166(finite_difference_hessian) + 15 0.000 0.000 0.724 0.048 PyAutoFit/autofit/non_linear/initializer.py:63(samples_from_model) + 15 0.012 0.001 0.723 0.048 PyAutoFit/autofit/non_linear/initializer.py:147(samples_jax) + 4313 0.078 0.000 0.714 0.000 SP/matplotlib/text.py:157(_reset_visual_defaults) + 60 0.011 0.000 0.711 0.012 PyAutoFit/autofit/non_linear/search/nest/dynesty/search/abstract.py:318(samples_info_from) + 45 0.004 0.000 0.702 0.016 PyAutoFit/autofit/text/text_util.py:55(result_info_from) + 97767 0.222 0.000 0.701 0.000 SP/scipy/_lib/array_api_compat/numpy/_aliases.py:70(asarray) + 17 0.000 0.000 0.701 0.041 PyAutoFit/autofit/graphical/expectation_propagation/history.py:155(evidences) + 750 0.037 0.000 0.688 0.001 SP/matplotlib/axis.py:888(reset_ticks) + 1 0.000 0.000 0.687 0.687 PyAutoFit/autofit/graphical/expectation_propagation/history.py:316(evidences) +531330/531060 0.643 0.000 0.665 0.000 {built-in method numpy.asarray} + 194/133 0.001 0.000 0.663 0.005 :1299(exec_module) + 194/133 0.203 0.001 0.660 0.005 {built-in method _imp.exec_dynamic} + 1747 0.472 0.000 0.658 0.000 SP/matplotlib/backends/backend_agg.py:93(draw_path) + 150 0.002 0.000 0.658 0.004 SP/matplotlib/artist.py:1834(kwdoc) + 90 0.004 0.000 0.650 0.007 PyAutoFit/autofit/text/samples_text.py:15(summary) + 32363 0.072 0.000 0.642 0.000 SP/scipy/_lib/array_api_compat/_internal.py:33(wrapped_f) + 72485 0.248 0.000 0.641 0.000 STDLIB/copy.py:61(copy) + 1 0.001 0.001 0.637 0.637 SP/scipy/stats/_stats_py.py:1() + 3197 0.011 0.000 0.635 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1969(priors) + 3590 0.006 0.000 0.628 0.000 PyAutoFit/autofit/mapper/model.py:206(path_instance_tuples_for_class) + 3142 0.005 0.000 0.627 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1978(prior_with_id) + 3142 0.006 0.000 0.622 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1974(_prior_id_map) +49335/3590 0.153 0.000 0.622 0.000 PyAutoFit/autofit/mapper/prior_model/recursion.py:96(wrapper) + 1950730 0.620 0.000 0.620 0.000 {method 'append' of 'list' objects} + 120 0.001 0.000 0.619 0.005 PyAutoFit/autofit/non_linear/samples/pdf.py:201(values_at_upper_sigma) + 64220 0.111 0.000 0.616 0.000 PyAutoFit/autofit/mapper/prior_model/prior_model.py:478(is_deferred_arguments) + 274103 0.268 0.000 0.615 0.000 SP/matplotlib/__init__.py:781(__getitem__) + 2393 0.042 0.000 0.615 0.000 SP/matplotlib/artist.py:786(set_clip_path) + 32 0.001 0.000 0.614 0.019 SP/matplotlib/_mathtext.py:664(__init__) + 36800 0.077 0.000 0.611 0.000 SP/numpy/_core/fromnumeric.py:2477(any) + 120 0.001 0.000 0.611 0.005 PyAutoFit/autofit/non_linear/samples/pdf.py:218(values_at_lower_sigma) +11013/10461 0.102 0.000 0.605 0.000 SP/matplotlib/axes/_base.py:887(_unstale_viewLim) + 8120 0.119 0.000 0.605 0.000 SP/scipy/_lib/array_api_extra/_lib/_funcs.py:146(_apply_where) + 3303 0.013 0.000 0.604 0.000 PyAutoFit/autofit/mapper/model.py:304(attribute_tuples_with_type) +49335/3590 0.271 0.000 0.602 0.000 PyAutoFit/autofit/mapper/model.py:338(path_instances_of_class) + 45 0.001 0.000 0.601 0.013 SP/matplotlib/collections.py:1598(__init__) + 3258 0.007 0.000 0.598 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1768(prior_tuples) + 1 0.000 0.000 0.591 0.591 SP/dynesty/results.py:1() + 1 0.000 0.000 0.589 0.589 SP/dynesty/utils.py:1() + 1015 0.021 0.000 0.586 0.001 SP/numpy/lib/_function_base_impl.py:2524(_get_ufunc_and_otypes) +40268/38608 0.078 0.000 0.586 0.000 STDLIB/contextlib.py:132(__enter__) + 53/48 0.000 0.000 0.584 0.012 STDLIB/importlib/__init__.py:73(import_module) + 53/48 0.000 0.000 0.584 0.012 :1375(_gcd_import) + 550101 0.410 0.000 0.583 0.000 PyAutoFit/autofit/non_linear/fitness.py:337(_xp) + 27636 0.185 0.000 0.582 0.000 PyAutoFit/autofit/messages/truncated_normal.py:72(__init__) + 30 0.001 0.000 0.579 0.019 PyAutoFit/autofit/non_linear/search/updater.py:240(_compute_latent_samples) + 5724 0.096 0.000 0.573 0.000 SP/numpy/lib/_function_base_impl.py:415(average) + 766957 0.529 0.000 0.571 0.000 {built-in method _abc._abc_instancecheck} + 2814 0.040 0.000 0.564 0.000 SP/matplotlib/ticker.py:214(format_ticks) + 330 0.001 0.000 0.564 0.002 PyAutoFit/autofit/graphical/factor_graphs/factor.py:391(_factor_args) + 330 0.003 0.000 0.563 0.002 PyAutoFit/autofit/graphical/mean_field.py:285(_logpdf) + 32884 0.085 0.000 0.560 0.000 SP/numpy/_core/fromnumeric.py:3052(max) + 45 0.018 0.000 0.560 0.012 SP/matplotlib/collections.py:1642(set_segments) + 330 0.001 0.000 0.558 0.002 PyAutoFit/autofit/graphical/mean_field.py:288(logpdf) + 150 0.016 0.000 0.555 0.004 SP/matplotlib/artist.py:1595(pprint_setters) + 12115 0.154 0.000 0.555 0.000 SP/scipy/special/_logsumexp.py:169(_elements_and_indices_with_max_real) + 1206 0.007 0.000 0.555 0.000 PyAutoFit/autofit/graphical/mean_field.py:294() + 30 0.001 0.000 0.551 0.018 SP/anesthetic/plotting/_core.py:80(__call__) + 30 0.002 0.000 0.551 0.018 SP/pandas/plotting/_core.py:946(__call__) + 1500 0.016 0.000 0.549 0.000 PyAutoFit/autofit/non_linear/initializer.py:50(figure_of_metric) + 65736 0.134 0.000 0.544 0.000 PyAutoNerves/autonerves/conf.py:188(__getitem__) + 230054 0.543 0.000 0.543 0.000 {method 'copy' of 'numpy.ndarray' objects} + 412 0.010 0.000 0.536 0.001 PyAutoFit/autofit/graphical/mean_field.py:296(logpdf_gradient) + 1319 0.008 0.000 0.535 0.000 SP/matplotlib/patches.py:633(draw) + 30 0.001 0.000 0.535 0.018 SP/pandas/plotting/_matplotlib/__init__.py:58(plot) + 1177919 0.494 0.000 0.528 0.000 {method 'get' of 'dict' objects} + 1259 0.022 0.000 0.526 0.000 SP/matplotlib/patches.py:583(_draw_paths_with_artist_properties) + 38/33 0.000 0.000 0.524 0.016 SP/scipy/__init__.py:129(__getattr__) +10787/10571 0.024 0.000 0.521 0.000 SP/matplotlib/axes/_base.py:901(viewLim) + 10604 0.272 0.000 0.519 0.000 STDLIB/inspect.py:882(cleandoc) + 5645 0.198 0.000 0.514 0.000 SP/dynesty/sampling.py:270(propose_ball_point) + 615536 0.398 0.000 0.513 0.000 PyAutoFit/autofit/non_linear/samples/sample.py:119(is_path_kwargs) + 30 0.002 0.000 0.512 0.017 SP/pandas/plotting/_matplotlib/core.py:497(generate) + 19912 0.037 0.000 0.510 0.000 SP/matplotlib/font_manager.py:961(copy) + 1 0.000 0.000 0.510 0.510 SP/matplotlib/figure.py:1() +40268/38608 0.068 0.000 0.507 0.000 STDLIB/contextlib.py:141(__exit__) + 4048 0.021 0.000 0.506 0.000 SP/matplotlib/patches.py:307(get_transform) + 64869 0.502 0.000 0.502 0.000 {built-in method numpy.arange} + 1451 0.210 0.000 0.500 0.000 :755(_compile_bytecode) + 1080 0.002 0.000 0.499 0.000 PyAutoFit/autofit/messages/truncated_normal.py:460(logpdf_gradient) + 1 0.000 0.000 0.498 0.498 SCRATCH/toy.py:1() + 50891 0.157 0.000 0.498 0.000 {method 'any' of 'numpy.generic' objects} + 1080 0.003 0.000 0.497 0.000 PyAutoFit/autofit/messages/truncated_normal.py:400(_normal_gradient_hessian) +1677/1665 0.006 0.000 0.495 0.000 :806(module_from_spec) + 1080 0.028 0.000 0.495 0.000 PyAutoFit/autofit/messages/truncated_normal.py:416(_normal_gradient_hessian_from) + 10640 0.023 0.000 0.490 0.000 STDLIB/inspect.py:863(getdoc) + 8731 0.041 0.000 0.489 0.000 SP/matplotlib/path.py:99(__init__) + 16352 0.303 0.000 0.486 0.000 PyAutoFit/autofit/text/formatter.py:247(write_row) + 1263290 0.485 0.000 0.485 0.000 {method 'items' of 'dict' objects} + 1 0.000 0.000 0.481 0.481 PyAutoFit/autofit/__init__.py:1() + 1 0.000 0.000 0.479 0.479 SP/matplotlib/projections/__init__.py:1() + 2766 0.141 0.000 0.473 0.000 SP/matplotlib/lines.py:686(recache) + 65748 0.058 0.000 0.473 0.000 SP/numpy/_core/_methods.py:67(_all) +7014/7012 0.041 0.000 0.471 0.000 SP/matplotlib/transforms.py:1473(transform) + 69/65 0.002 0.000 0.469 0.007 SP/matplotlib/offsetbox.py:820(draw) +1623971/1608355 0.453 0.000 0.468 0.000 {built-in method builtins.len} + 64326 0.100 0.000 0.465 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1742(tuple_prior_tuples) + 1 0.000 0.000 0.465 0.465 SP/scipy/interpolate/__init__.py:1() + 11599 0.073 0.000 0.463 0.000 SP/matplotlib/transforms.py:805(from_extents) + 197273 0.315 0.000 0.462 0.000 PyAutoNerves/autonerves/conf.py:57(__getitem__) + 24230 0.174 0.000 0.462 0.000 SP/scipy/_lib/array_api_compat/common/_aliases.py:631(sign) + 30 0.016 0.001 0.458 0.015 PyAutoFit/autofit/non_linear/search/updater.py:328(_log_process_state) + 1 0.000 0.000 0.457 0.457 SP/pandas/core/arrays/__init__.py:1() + 32 0.000 0.000 0.455 0.014 SP/yaml/__init__.py:117(safe_load) + 32 0.001 0.000 0.454 0.014 SP/yaml/__init__.py:74(load) + 32 0.000 0.000 0.448 0.014 SP/yaml/constructor.py:47(get_single_data) + 993630 0.446 0.000 0.446 0.000 {method 'startswith' of 'str' objects} + 8660 0.021 0.000 0.446 0.000 SP/matplotlib/axis.py:2345(getter) + 5999 0.040 0.000 0.446 0.000 SP/matplotlib/artist.py:1463(get_valid_values) + 1395 0.012 0.000 0.442 0.000 SP/matplotlib/ticker.py:737(set_locs) + 45794 0.079 0.000 0.439 0.000 {method 'all' of 'numpy.ndarray' objects} +3141/3040 0.013 0.000 0.434 0.000 SP/psutil/_pslinux.py:1714(wrapper) + 30 0.000 0.000 0.434 0.014 SP/dynesty/nestedsamplers.py:252(save) + 30 0.001 0.000 0.434 0.014 SP/dynesty/utils.py:2281(save_sampler) + 60 0.004 0.000 0.434 0.007 SP/anesthetic/labelled_pandas.py:184(__getitem__) +334375/290835 0.228 0.000 0.431 0.000 SP/matplotlib/artist.py:317(stale) + 2939 0.004 0.000 0.429 0.000 SP/psutil/__init__.py:1215(open_files) + 64338 0.213 0.000 0.429 0.000 PyAutoFit/autofit/mapper/model.py:86(_cached_property_names) + 32 0.000 0.000 0.427 0.013 SP/yaml/composer.py:29(get_single_node) + 194/191 0.001 0.000 0.425 0.002 :1291(create_module) + 2634 0.049 0.000 0.425 0.000 SP/matplotlib/patches.py:800(get_patch_transform) + 30 0.418 0.014 0.424 0.014 {built-in method _pickle.dump} + 194/191 0.414 0.002 0.422 0.002 {built-in method _imp.create_dynamic} + 293304 0.233 0.000 0.421 0.000 PyAutoFit/autofit/mapper/prior/abstract.py:245(__getattr__) + 61089 0.317 0.000 0.420 0.000 PyAutoFit/autofit/mapper/prior/_erf_helpers.py:26(_norm_ppf) + 789 0.015 0.000 0.419 0.001 PyAutoFit/autofit/graphical/mean_field.py:76(__init__) + 57028 0.074 0.000 0.416 0.000 SP/matplotlib/artist.py:416(pchanged) + 32 0.000 0.000 0.416 0.013 SP/yaml/composer.py:50(compose_document) + 1793/32 0.012 0.000 0.415 0.013 SP/yaml/composer.py:63(compose_node) + 286/32 0.012 0.000 0.413 0.013 SP/yaml/composer.py:117(compose_mapping_node) + 3951 0.030 0.000 0.413 0.000 SP/matplotlib/text.py:194(update) + 2939 0.074 0.000 0.410 0.000 SP/psutil/_pslinux.py:2299(open_files) + 1 0.000 0.000 0.408 0.408 SP/dynesty/bounding.py:1() + 1152 0.039 0.000 0.408 0.000 SP/matplotlib/axis.py:2810(get_tick_space) + 1 0.000 0.000 0.407 0.407 SP/scipy/special/__init__.py:1() + 225295 0.230 0.000 0.407 0.000 PyAutoFit/autofit/mapper/prior_model/attribute_pair.py:20(__iter__) + 800 0.005 0.000 0.406 0.001 SP/matplotlib/axis.py:234(set_clip_path) + 1 0.000 0.000 0.406 0.406 SP/matplotlib/image.py:1() + 81902 0.273 0.000 0.405 0.000 SP/numpy/_core/numerictypes.py:368(_preprocess_dtype) + 11723 0.201 0.000 0.402 0.000 SP/numpy/_core/_methods.py:118(_mean) + 279265 0.229 0.000 0.401 0.000 {built-in method builtins.issubclass} + 26847 0.054 0.000 0.400 0.000 SP/numpy/_core/fromnumeric.py:2589(all) + 1290 0.111 0.000 0.391 0.000 PyAutoFit/autofit/non_linear/samples/pdf.py:485(quantile) + 1 0.000 0.000 0.390 0.390 SP/scipy/interpolate/_interpolate.py:1() + 1 0.000 0.000 0.390 0.390 SP/pandas/core/arrays/arrow/__init__.py:1() + 615776 0.238 0.000 0.385 0.000 PyAutoFit/autofit/non_linear/samples/interface.py:98(paths) + 1 0.001 0.001 0.384 0.384 SP/scipy/special/_support_alternative_backends.py:1() + 30 0.002 0.000 0.384 0.013 SP/pandas/plotting/_matplotlib/hist.py:126(_make_plot) + 15 0.001 0.000 0.383 0.026 PyAutoFit/autofit/non_linear/search/abstract_search.py:1092(post_fit_output) + 1571 0.009 0.000 0.381 0.000 PyAutoFit/autofit/messages/abstract.py:402(__call__) + 1 0.000 0.000 0.379 0.379 SP/scipy/interpolate/_fitpack_py.py:1() + 1 0.000 0.000 0.377 0.377 SP/matplotlib/backend_bases.py:1() + 5396 0.008 0.000 0.376 0.000 SP/yaml/parser.py:94(check_event) + + diff --git a/draft/refactor/autofit/ep_factor_search_wrapper_overhead_assets/ep_pstats_tottime.txt b/draft/refactor/autofit/ep_factor_search_wrapper_overhead_assets/ep_pstats_tottime.txt new file mode 100644 index 000000000..e973dd412 --- /dev/null +++ b/draft/refactor/autofit/ep_factor_search_wrapper_overhead_assets/ep_pstats_tottime.txt @@ -0,0 +1,410 @@ +Thu Sep 24 14:49:27 2026 ep.prof + + 51419624 function calls (50728443 primitive calls) in 109.119 seconds + + Ordered by: internal time + List reduced from 10814 to 400 due to restriction <400> + + ncalls tottime percall cumtime percall filename:lineno(function) + 64220 2.723 0.000 8.020 0.000 PyAutoFit/autofit/mapper/prior_model/prior_model.py:483(_instance_for_arguments) + 359323 2.614 0.000 2.618 0.000 {method 'reduce' of 'numpy.ufunc' objects} + 55007 2.452 0.000 32.287 0.001 SP/dynesty/sampler.py:336(_fill_queue) + 61119 2.420 0.000 19.277 0.000 PyAutoFit/autofit/non_linear/fitness.py:351(call) + 506/6 2.100 0.004 4.513 0.752 SP/matplotlib/backends/backend_agg.py:206(get_text_width_height_descent) + 61154 2.087 0.000 2.087 0.000 PyAutoFit/autofit/example/model.py:65(model_data_from) + 80 1.866 0.023 1.866 0.023 {method 'encode' of 'ImagingEncoder' objects} +485820/482427 1.780 0.000 3.150 0.000 PyAutoFit/autofit/mapper/model.py:30(cache) + 15 1.780 0.119 1.781 0.119 {built-in method gc.collect} +4117601/4116698 1.704 0.000 2.648 0.000 {built-in method builtins.isinstance} + 242/0 1.633 0.007 0.000 SP/matplotlib/backends/backend_agg.py:185(draw_text) +107861/105294 1.460 0.000 5.999 0.000 {built-in method builtins.sum} +481330/481315 1.398 0.000 5.760 0.000 PyAutoFit/autofit/mapper/prior_model/attribute_pair.py:6(wrapper) + 12115 1.249 0.000 4.370 0.000 SP/scipy/special/_logsumexp.py:201(_logsumexp) + 284917 1.092 0.000 1.180 0.000 {built-in method numpy.array} + 18598 1.036 0.000 3.452 0.000 SP/scipy/stats/_distn_infrastructure.py:2132(cdf) + 61119 1.025 0.000 1.818 0.000 PyAutoFit/autofit/non_linear/fitness.py:601(manage_quick_update) + 61119 0.847 0.000 3.571 0.000 PyAutoFit/autofit/example/analysis.py:152(model_data_1d_from) +1275694/1274269 0.831 0.000 1.329 0.000 {built-in method builtins.getattr} + 122178 0.829 0.000 1.090 0.000 PyAutoFit/autofit/mapper/prior/_erf_helpers.py:17(_norm_cdf) +2175963/2174688 0.828 0.000 1.618 0.000 {built-in method builtins.hasattr} + 1425 0.799 0.001 2.662 0.002 PyAutoFit/autofit/non_linear/samples/samples.py:257(parameter_lists) + 12115 0.796 0.000 6.975 0.001 SP/scipy/special/_logsumexp.py:15(logsumexp) + 4466 0.773 0.000 1.092 0.000 SP/matplotlib/lines.py:758(draw) +531330/531060 0.643 0.000 0.665 0.000 {built-in method numpy.asarray} + 33440 0.641 0.000 1.707 0.000 SP/scipy/cluster/vq.py:150(vq) + 42011 0.638 0.000 1.437 0.000 SP/scipy/_lib/array_api_extra/_lib/_at.py:224(_op) + 615536 0.637 0.000 0.810 0.000 PyAutoFit/autofit/non_linear/samples/sample.py:104(parameter_lists_for_paths) +266403/3600 0.632 0.000 1.608 0.000 STDLIB/copy.py:118(deepcopy) + 1950730 0.620 0.000 0.620 0.000 {method 'append' of 'list' objects} + 2279/23 0.606 0.000 0.047 0.002 SP/matplotlib/backends/backend_agg.py:248(_prepare_font) + 3344 0.605 0.000 2.739 0.001 SP/scipy/cluster/vq.py:648(kmeans2) + 119178 0.587 0.000 26.534 0.000 SP/dynesty/dynesty.py:905(__call__) + 293313 0.578 0.000 0.968 0.000 PyAutoFit/autofit/mapper/prior_model/attribute_pair.py:8() + 61119 0.577 0.000 5.403 0.000 PyAutoFit/autofit/example/analysis.py:121(log_likelihood_function) + 62649 0.570 0.000 10.969 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:990(instance_from_vector) + 54168 0.570 0.000 0.734 0.000 SP/numpy/lib/_twodim_base_impl.py:163(eye) + 28581 0.567 0.000 0.734 0.000 SP/numpy/lib/_stride_tricks_impl.py:340(_broadcast_to) + 230054 0.543 0.000 0.543 0.000 {method 'copy' of 'numpy.ndarray' objects} + 766957 0.529 0.000 0.571 0.000 {built-in method _abc._abc_instancecheck} + 6691 0.504 0.000 47.989 0.007 SP/dynesty/sampler.py:599(sample) + 64869 0.502 0.000 0.502 0.000 {built-in method numpy.arange} + 11891 0.500 0.000 1.088 0.000 SP/scipy/linalg/_decomp.py:284(eigh) + 1177919 0.494 0.000 0.528 0.000 {method 'get' of 'dict' objects} + 1263290 0.485 0.000 0.485 0.000 {method 'items' of 'dict' objects} + 1747 0.472 0.000 0.658 0.000 SP/matplotlib/backends/backend_agg.py:93(draw_path) +1623971/1608355 0.453 0.000 0.468 0.000 {built-in method builtins.len} + 993630 0.446 0.000 0.446 0.000 {method 'startswith' of 'str' objects} + 64220 0.446 0.000 9.185 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1818(instance_for_arguments) + 109486 0.427 0.000 1.471 0.000 SP/numpy/_core/fromnumeric.py:69(_wrapreduction) + 30 0.418 0.014 0.424 0.014 {built-in method _pickle.dump} + 194/191 0.414 0.002 0.422 0.002 {built-in method _imp.create_dynamic} + 550101 0.410 0.000 0.583 0.000 PyAutoFit/autofit/non_linear/fitness.py:337(_xp) + 61089 0.404 0.000 4.259 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:838(vector_from_unit_vector) + 615536 0.398 0.000 0.513 0.000 PyAutoFit/autofit/non_linear/samples/sample.py:119(is_path_kwargs) + 4836/4 0.384 0.000 2.953 0.738 SP/matplotlib/text.py:358(_get_layout) + 61089 0.379 0.000 2.596 0.000 PyAutoFit/autofit/mapper/prior/truncated_gaussian.py:147(value_for) + 5664/82 0.371 0.000 8.711 0.106 SP/dynesty/bounding.py:1368(_bounding_ellipsoids) +257983/256914 0.362 0.000 3.929 0.000 :1390(_handle_fromlist) + 28517 0.355 0.000 1.608 0.000 SP/matplotlib/artist.py:1190(_update_props) + 61089 0.354 0.000 1.864 0.000 PyAutoFit/autofit/mapper/prior/_erf_helpers.py:35(truncated_normal_value_for) + 766957 0.353 0.000 0.924 0.000 :117(__instancecheck__) + 53878 0.352 0.000 24.318 0.000 SP/dynesty/sampling.py:30(sample_unif) + 6661 0.340 0.000 42.432 0.006 SP/dynesty/sampler.py:413(_new_point) + 153968 0.338 0.000 1.358 0.000 SP/numpy/_core/fromnumeric.py:51(_wrapfunc) + 5664 0.334 0.000 4.182 0.001 SP/dynesty/bounding.py:1291(bounding_ellipsoid) + 61119 0.326 0.000 21.444 0.000 PyAutoFit/autofit/non_linear/fitness.py:552(call_wrap) + 5724 0.324 0.000 0.954 0.000 SP/numpy/lib/_function_base_impl.py:2680(cov) + 195294 0.323 0.000 0.323 0.000 {built-in method numpy.zeros} + 81902 0.320 0.000 0.841 0.000 SP/numpy/_core/numerictypes.py:381(isdtype) + 61089 0.317 0.000 0.420 0.000 PyAutoFit/autofit/mapper/prior/_erf_helpers.py:26(_norm_ppf) + 197273 0.315 0.000 0.462 0.000 PyAutoNerves/autonerves/conf.py:57(__getitem__) + 23651 0.307 0.000 0.371 0.000 SP/matplotlib/cbook.py:1752(normalize_kwargs) + 64463 0.306 0.000 0.306 0.000 {method 'argmax' of 'numpy.ndarray' objects} + 16352 0.303 0.000 0.486 0.000 PyAutoFit/autofit/text/formatter.py:247(write_row) + 260022 0.302 0.000 0.302 0.000 {built-in method numpy.asanyarray} + 59589 0.298 0.000 4.485 0.000 PyAutoFit/autofit/non_linear/search/nest/dynesty/search/abstract.py:58(prior_transform) + 97 0.292 0.003 0.293 0.003 SP/matplotlib/collections.py:352(draw) + 53894 0.287 0.000 1.170 0.000 SP/numpy/_core/numeric.py:2195(identity) + 1451 0.285 0.000 0.285 0.000 {built-in method marshal.loads} + 5938 0.277 0.000 1.332 0.000 SP/dynesty/bounding.py:1215(improve_covar_mat) + 81902 0.273 0.000 0.405 0.000 SP/numpy/_core/numerictypes.py:368(_preprocess_dtype) + 55007 0.273 0.000 32.615 0.001 SP/dynesty/sampler.py:399(_get_point_value) + 10604 0.272 0.000 0.519 0.000 STDLIB/inspect.py:882(cleandoc) +49335/3590 0.271 0.000 0.602 0.000 PyAutoFit/autofit/mapper/model.py:338(path_instances_of_class) + 12145 0.270 0.000 0.843 0.000 SP/scipy/_lib/_array_api.py:524(xp_promote) + 274103 0.268 0.000 0.615 0.000 SP/matplotlib/__init__.py:781(__getitem__) + 64463 0.262 0.000 0.762 0.000 SP/numpy/_core/fromnumeric.py:1251(argmax) + 72485 0.248 0.000 0.641 0.000 STDLIB/copy.py:61(copy) + 32644 0.248 0.000 0.256 0.000 PyAutoFit/autofit/messages/truncated_normal.py:522(log_prior_from_value) + 81910 0.247 0.000 0.260 0.000 PyAutoFit/autofit/text/formatter.py:240() + 12016 0.247 0.000 1.523 0.000 SP/scipy/_lib/_util.py:1149(wrapper) + 22128 0.241 0.000 0.302 0.000 SP/numpy/_core/shape_base.py:380(stack) + 2376 0.240 0.000 0.240 0.000 {method 'read' of '_io.BufferedReader' objects} + 733458 0.239 0.000 0.239 0.000 PyAutoFit/autofit/non_linear/analysis/analysis.py:128(_xp) + 615776 0.238 0.000 0.385 0.000 PyAutoFit/autofit/non_linear/samples/interface.py:98(paths) + 59589 0.234 0.000 21.877 0.000 SP/dynesty/utils.py:183(__call__) + 293304 0.233 0.000 0.421 0.000 PyAutoFit/autofit/mapper/prior/abstract.py:245(__getattr__) + 225295 0.230 0.000 0.407 0.000 PyAutoFit/autofit/mapper/prior_model/attribute_pair.py:20(__iter__) + 279265 0.229 0.000 0.401 0.000 {built-in method builtins.issubclass} +334375/290835 0.228 0.000 0.431 0.000 SP/matplotlib/artist.py:317(stale) + 63647 0.226 0.000 0.881 0.000 SP/numpy/_core/fromnumeric.py:89(_wrapreduction_any_all) + 97767 0.222 0.000 0.701 0.000 SP/scipy/_lib/array_api_compat/numpy/_aliases.py:70(asarray) + 20658 0.221 0.000 1.485 0.000 SP/scipy/stats/_distn_infrastructure.py:612(argsreduce) + 18598 0.216 0.000 0.353 0.000 SP/scipy/stats/_distn_infrastructure.py:1044(_open_support_mask) + 2790 0.213 0.000 1.130 0.000 SP/matplotlib/ticker.py:2159(_raw_ticks) + 64338 0.213 0.000 0.429 0.000 PyAutoFit/autofit/mapper/model.py:86(_cached_property_names) + 9661 0.211 0.000 5.887 0.001 SP/dynesty/utils.py:1338(progress_integration) + 1451 0.210 0.000 0.500 0.000 :755(_compile_bytecode) + 40878 0.208 0.000 0.318 0.000 SP/matplotlib/font_manager.py:700(__hash__) + 64604 0.206 0.000 0.307 0.000 SP/matplotlib/cbook.py:2020(_setattr_cm) + 646919 0.206 0.000 0.206 0.000 PyAutoFit/autofit/mapper/prior_model/prior_model.py:348(constructor_argument_names) + 57884 0.205 0.000 0.350 0.000 SP/matplotlib/cbook.py:348(process) + 194/133 0.203 0.001 0.660 0.005 {built-in method _imp.exec_dynamic} + 138957 0.202 0.000 0.347 0.000 SP/scipy/_lib/_array_api.py:75(_asarray) + 11723 0.201 0.000 0.402 0.000 SP/numpy/_core/_methods.py:118(_mean) + 279228 0.201 0.000 0.276 0.000 PyAutoFit/autofit/mapper/prior/abstract.py:261(__hash__) + 4358 0.200 0.000 1.459 0.000 SP/matplotlib/lines.py:301(__init__) + 5645 0.198 0.000 0.514 0.000 SP/dynesty/sampling.py:270(propose_ball_point) + 32613 0.197 0.000 0.980 0.000 SP/numpy/lib/_stride_tricks_impl.py:481(broadcast_arrays) + 31 0.194 0.006 0.758 0.024 SP/matplotlib/font_manager.py:1453(_findfont_cached) + 5679 0.192 0.000 1.122 0.000 SP/dynesty/bounding.py:115(__init__) + 274428 0.190 0.000 0.347 0.000 SP/matplotlib/__init__.py:701(_get) + 19774 0.189 0.000 0.210 0.000 {built-in method posix.stat} + 58830 0.186 0.000 0.997 0.000 SP/numpy/_core/fromnumeric.py:2338(sum) + 27636 0.185 0.000 0.582 0.000 PyAutoFit/autofit/messages/truncated_normal.py:72(__init__) + 944949 0.185 0.000 0.185 0.000 PyAutoFit/autofit/mapper/prior_model/prior_model.py:74(__hash__) + 184889 0.184 0.000 0.264 0.000 SP/scipy/_lib/array_api_compat/common/_helpers.py:683(_check_device) + 32619 0.180 0.000 0.191 0.000 SP/numpy/lib/_stride_tricks_impl.py:413(_broadcast_shape) + 24230 0.174 0.000 0.462 0.000 SP/scipy/_lib/array_api_compat/common/_aliases.py:631(sign) + 120619 0.174 0.000 0.219 0.000 SP/matplotlib/_api/__init__.py:100(check_in_list) +9616/7678 0.172 0.000 0.334 0.000 SP/matplotlib/transforms.py:2432(get_affine) + 61089 0.172 0.000 21.699 0.000 SP/timeout_decorator/timeout_decorator.py:71(new_function) +31199/28231 0.167 0.000 1.133 0.000 STDLIB/copy.py:247(_reconstruct) + 58855 0.167 0.000 0.167 0.000 {built-in method numpy._core._multiarray_umath._place} +365928/365901 0.164 0.000 0.166 0.000 {built-in method builtins.iter} + 57868 0.163 0.000 0.163 0.000 {method 'nonzero' of 'numpy.ndarray' objects} + 541 0.163 0.000 0.163 0.000 {method 'compress' of 'zlib.Compress' objects} +151103/150368 0.162 0.000 0.184 0.000 {built-in method __new__ of type object at 0xa1eb20} + 15357 0.161 0.000 0.161 0.000 {built-in method numpy._core._multiarray_umath.c_einsum} + 275715 0.161 0.000 0.163 0.000 {function ConvertingDict.__getitem__ at 0x7f7fca500360} +14356/6142 0.159 0.000 1.442 0.000 STDLIB/copy.py:217(_deepcopy_dict) + 90594 0.157 0.000 0.173 0.000 SP/scipy/_lib/array_api_compat/common/_helpers.py:149(is_torch_array) + 50891 0.157 0.000 0.498 0.000 {method 'any' of 'numpy.generic' objects} + 61089 0.156 0.000 2.768 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:859() + 11891 0.156 0.000 0.291 0.000 SP/scipy/linalg/lapack.py:1028(_compute_lwork) + 12146 0.155 0.000 0.262 0.000 SP/scipy/_lib/_array_api.py:471(xp_result_type) + 25482 0.155 0.000 0.177 0.000 SP/matplotlib/font_manager.py:1233(score_stretch) + 60504 0.154 0.000 0.154 0.000 {method 'reshape' of 'numpy.ndarray' objects} + 12115 0.154 0.000 0.555 0.000 SP/scipy/special/_logsumexp.py:169(_elements_and_indices_with_max_real) +49335/3590 0.153 0.000 0.622 0.000 PyAutoFit/autofit/mapper/prior_model/recursion.py:96(wrapper) + 10952 0.152 0.000 0.302 0.000 SP/matplotlib/artist.py:179(__init__) + 25443 0.151 0.000 0.354 0.000 SP/matplotlib/transforms.py:750(__init__) + 26292 0.147 0.000 1.256 0.000 PyAutoFit/autofit/messages/abstract.py:204(__mul__) +75890/72594 0.146 0.000 0.149 0.000 {built-in method _abc._abc_subclasscheck} + 19122 0.146 0.000 0.146 0.000 {built-in method matplotlib._path.affine_transform} + 9329 0.143 0.000 0.343 0.000 SP/dynesty/bounding.py:424(contains) + 2766 0.141 0.000 0.473 0.000 SP/matplotlib/lines.py:686(recache) + 16284 0.137 0.000 0.137 0.000 {method 'sub' of 're.Pattern' objects} + 56527 0.135 0.000 0.196 0.000 SP/matplotlib/transforms.py:1770(__init__) + 22905 0.135 0.000 0.147 0.000 SP/matplotlib/transforms.py:180(set_children) + 1339 0.135 0.000 2.990 0.002 SP/matplotlib/axis.py:59(__init__) + 65736 0.134 0.000 0.544 0.000 PyAutoNerves/autonerves/conf.py:188(__getitem__) + 42011 0.134 0.000 0.147 0.000 SP/scipy/_lib/array_api_compat/common/_helpers.py:957(is_writeable_array) + 93285 0.133 0.000 0.283 0.000 {built-in method builtins.any} +359341/329631 0.131 0.000 0.299 0.000 {built-in method builtins.hash} + 54126 0.128 0.000 0.225 0.000 SP/scipy/_lib/array_api_compat/common/_helpers.py:217(is_jax_array) + 29226 0.128 0.000 0.183 0.000 PyAutoFit/autofit/messages/abstract.py:41(__init__) + 41913 0.125 0.000 0.280 0.000 {built-in method builtins.sorted} + 60247 0.124 0.000 0.183 0.000 SP/dynesty/utils.py:87(__gt__) + 40268 0.122 0.000 0.145 0.000 STDLIB/contextlib.py:104(__init__) + 262408 0.122 0.000 0.122 0.000 {method 'lower' of 'str' objects} + 64338 0.122 0.000 0.215 0.000 PyAutoNerves/autonerves/tools/decorators.py:29(cached_property_names) + 134732 0.121 0.000 0.190 0.000 SP/numpy/lib/_function_base_impl.py:339(iterable) + 62949 0.120 0.000 0.933 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1955(prior_count) + 6202 0.119 0.000 2.322 0.000 PyAutoFit/autofit/messages/truncated_normal.py:29(log_partition) + 8120 0.119 0.000 0.605 0.000 SP/scipy/_lib/array_api_extra/_lib/_funcs.py:146(_apply_where) + 1407 0.118 0.000 6.018 0.004 SP/matplotlib/axis.py:1276(_update_ticks) + 486888 0.118 0.000 0.118 0.000 {built-in method builtins.id} +96889/90249 0.115 0.000 0.979 0.000 {built-in method builtins.next} + 2340 0.112 0.000 0.112 0.000 PyAutoFit/autofit/non_linear/samples/samples.py:270(weight_list) + 157023 0.112 0.000 0.156 0.000 {built-in method builtins.setattr} + 1290 0.111 0.000 0.391 0.000 PyAutoFit/autofit/non_linear/samples/pdf.py:485(quantile) + 64220 0.111 0.000 0.616 0.000 PyAutoFit/autofit/mapper/prior_model/prior_model.py:478(is_deferred_arguments) + 82655 0.110 0.000 0.110 0.000 {method 'astype' of 'numpy.ndarray' objects} + 3582 0.109 0.000 0.152 0.000 {built-in method _io.open} + 48222 0.108 0.000 0.246 0.000 SP/numpy/_core/_ufunc_config.py:440(__enter__) + 31199 0.108 0.000 0.124 0.000 {method '__reduce_ex__' of 'object' objects} + 15068 0.108 0.000 0.280 0.000 SP/numpy/_core/fromnumeric.py:41(_wrapit) + 8429 0.107 0.000 0.107 0.000 {method 'findall' of 're.Pattern' objects} + 98369 0.107 0.000 0.107 0.000 SP/matplotlib/transforms.py:109(__init__) + 78997 0.106 0.000 0.306 0.000 SP/scipy/_lib/array_api_compat/numpy/_aliases.py:97(astype) + 21776 0.105 0.000 0.187 0.000 SP/scipy/_lib/array_api_extra/_delegation.py:34(atleast_nd) + 22196 0.102 0.000 0.165 0.000 SP/matplotlib/_api/__init__.py:65(check_isinstance) +11013/10461 0.102 0.000 0.605 0.000 SP/matplotlib/axes/_base.py:887(_unstale_viewLim) + 1855/0 0.102 0.000 0.000 {built-in method builtins.exec} + 64326 0.100 0.000 0.465 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1742(tuple_prior_tuples) + 5645 0.099 0.000 0.180 0.000 SP/dynesty/bounding.py:1192(randsphere) + 8120 0.098 0.000 0.799 0.000 SP/scipy/_lib/array_api_extra/_lib/_funcs.py:60(apply_where) + 2030 0.098 0.000 1.023 0.001 SP/scipy/stats/_continuous_distns.py:10423(_truncnorm_stats_scalar) + 64220 0.098 0.000 0.116 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:193(check_assertions) + 46815 0.097 0.000 0.238 0.000 SP/numpy/_core/shape_base.py:21(atleast_1d) + 9661 0.097 0.000 0.155 0.000 SP/dynesty/utils.py:293(append) + 5724 0.096 0.000 0.573 0.000 SP/numpy/lib/_function_base_impl.py:415(average) + 209557 0.096 0.000 0.101 0.000 {built-in method builtins.min} + 120 0.096 0.001 0.180 0.002 PyAutoFit/autofit/non_linear/samples/sample.py:147(from_lists) + 5679 0.095 0.000 0.095 0.000 SP/dynesty/bounding.py:1175(logvol_prefactor) + 68896 0.095 0.000 0.095 0.000 {method 'get' of 'mappingproxy' objects} + 32644 0.095 0.000 0.796 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1533(log_prior_list_from_vector) + 1422 0.094 0.000 0.135 0.000 SP/numpy/_core/numeric.py:2337(isclose) + 24552 0.094 0.000 0.256 0.000 SP/matplotlib/transforms.py:1887(__init__) +111404/111224 0.094 0.000 0.095 0.000 {method 'update' of 'dict' objects} + 61119 0.093 0.000 0.274 0.000 PyAutoFit/autofit/non_linear/fitness.py:341(_is_jax) + 293313 0.093 0.000 0.093 0.000 PyAutoFit/autofit/mapper/prior_model/attribute_pair.py:16(__init__) + 62246 0.093 0.000 0.102 0.000 SP/scipy/_lib/array_api_compat/common/_helpers.py:72(_is_jax_zero_gradient_array) + 14253 0.092 0.000 0.153 0.000 SP/numpy/ma/core.py:3024(_update_from) + 83213 0.092 0.000 0.093 0.000 {method 'update' of 'set' objects} + 2986/4 0.091 0.000 3.048 0.762 SP/matplotlib/text.py:926(get_window_extent) + 3708 0.091 0.000 0.177 0.000 SP/matplotlib/transforms.py:2838(nonsingular) + 3210 0.089 0.000 0.090 0.000 {built-in method posix.listdir} + 82571 0.089 0.000 0.135 0.000 STDLIB/copy.py:231(_keep_alive) +3491/3389 0.089 0.000 1.385 0.000 {built-in method builtins.__build_class__} + 24546 0.089 0.000 0.203 0.000 SP/numpy/_core/numerictypes.py:471(issubdtype) + 41470 0.088 0.000 0.088 0.000 {method 'match' of 're.Pattern' objects} + 16354 0.088 0.000 0.108 0.000 {method 'writerow' of '_csv.writer' objects} + 3030 0.086 0.000 1.598 0.001 SP/dynesty/sampler.py:447(add_live_points) + 60990 0.086 0.000 0.086 0.000 {method 'split' of 'str' objects} + 20628 0.086 0.000 0.086 0.000 SP/scipy/stats/_continuous_distns.py:370(_norm_cdf) + 24125 0.085 0.000 0.201 0.000 SP/matplotlib/colors.py:278(to_rgba) + 225355 0.085 0.000 0.085 0.000 PyAutoFit/autofit/mapper/prior_model/attribute_pair.py:23(tuple) + 32884 0.085 0.000 0.560 0.000 SP/numpy/_core/fromnumeric.py:3052(max) +85858/85798 0.085 0.000 0.085 0.000 {method 'format' of 'str' objects} + 25482 0.084 0.000 0.137 0.000 SP/matplotlib/font_manager.py:1175(score_family) + 10826/11 0.084 0.000 6.492 0.590 SP/matplotlib/text.py:65(_get_text_metrics_with_cache) + 183532 0.083 0.000 0.083 0.000 {method 'values' of 'dict' objects} + 16244 0.082 0.000 0.330 0.000 PyAutoFit/autofit/messages/truncated_normal.py:185(calc_natural_parameters) + 12071 0.082 0.000 0.176 0.000 SP/scipy/_lib/_util.py:423(_asarray_validated) +81441/81336 0.082 0.000 0.224 0.000 {method 'join' of 'str' objects} + 42011 0.080 0.000 1.517 0.000 SP/scipy/_lib/array_api_extra/_lib/_at.py:362(set) + 31028 0.080 0.000 0.080 0.000 {method '__deepcopy__' of 'numpy.ndarray' objects} + 1453 0.079 0.000 0.079 0.000 {built-in method _io.open_code} + 45794 0.079 0.000 0.439 0.000 {method 'all' of 'numpy.ndarray' objects} + 1045 0.079 0.000 0.358 0.000 SP/scipy/stats/_distn_infrastructure.py:2051(pdf) + 40268 0.079 0.000 0.224 0.000 STDLIB/contextlib.py:299(helper) + 266110 0.079 0.000 0.079 0.000 {method 'lstrip' of 'str' objects} + 91517 0.078 0.000 0.103 0.000 STDLIB/enum.py:202(__get__) + 4313 0.078 0.000 0.714 0.000 SP/matplotlib/text.py:157(_reset_visual_defaults) + 55372 0.078 0.000 0.110 0.000 STDLIB/weakref.py:451(get) +40268/38608 0.078 0.000 0.586 0.000 STDLIB/contextlib.py:132(__enter__) + 48462 0.078 0.000 0.078 0.000 {method 'reset' of '_contextvars.ContextVar' objects} + 53064 0.077 0.000 0.120 0.000 STDLIB/enum.py:720(__call__) + 36800 0.077 0.000 0.611 0.000 SP/numpy/_core/fromnumeric.py:2477(any) + 44714 0.076 0.000 0.357 0.000 {built-in method builtins.max} + 1129 0.076 0.000 0.250 0.000 SP/dynesty/nestedsamplers.py:719(propose_live) + 11274 0.075 0.000 0.159 0.000 SP/scipy/_lib/_docscrape.py:168(_is_at_section) + 6527 0.075 0.000 0.076 0.000 PyAutoFit/autofit/messages/truncated_normal.py:216(invert_natural_parameters) + 48462 0.075 0.000 0.075 0.000 {built-in method numpy._core._multiarray_umath._make_extobj} + 136578 0.075 0.000 0.106 0.000 STDLIB/inspect.py:302(isclass) + 6427 0.074 0.000 0.161 0.000 PyAutoFit/autofit/messages/interface.py:242(_combined_support) + 57028 0.074 0.000 0.416 0.000 SP/matplotlib/artist.py:416(pchanged) + 2939 0.074 0.000 0.410 0.000 SP/psutil/_pslinux.py:2299(open_files) + 53267 0.074 0.000 0.129 0.000 :645(parent) + 85824 0.074 0.000 0.074 0.000 {method 'pop' of 'list' objects} + 10142 0.074 0.000 0.105 0.000 SP/matplotlib/font_manager.py:876(set_size) + 17873 0.073 0.000 0.073 0.000 {built-in method posix.readlink} + 11599 0.073 0.000 0.463 0.000 SP/matplotlib/transforms.py:805(from_extents) + 57808 0.073 0.000 0.361 0.000 SP/numpy/_core/fromnumeric.py:2018(nonzero) + 32363 0.072 0.000 0.642 0.000 SP/scipy/_lib/array_api_compat/_internal.py:33(wrapped_f) + 42011 0.072 0.000 0.078 0.000 SP/scipy/_lib/array_api_compat/common/_helpers.py:194(is_dask_array) + 8504/0 0.072 0.000 0.000 SP/matplotlib/artist.py:53(draw_wrapper) + 252455 0.072 0.000 0.072 0.000 SP/numpy/_core/multiarray.py:383(where) + 2808 0.071 0.000 0.204 0.000 STDLIB/inspect.py:2397(_signature_from_function) + 18803 0.071 0.000 0.108 0.000 SP/scipy/_lib/array_api_compat/common/_helpers.py:923(size) + 64220 0.071 0.000 0.352 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1762(direct_deferred_tuples) + 11806 0.071 0.000 0.083 0.000 SP/numpy/_core/_methods.py:76(_count_reduce_items) + 24230 0.071 0.000 0.288 0.000 SP/scipy/_lib/array_api_compat/common/_aliases.py:574(isdtype) +75890/72594 0.071 0.000 0.218 0.000 :121(__subclasscheck__) + 14528 0.070 0.000 0.189 0.000 SP/scipy/_lib/_docscrape.py:67(read_to_condition) + 61089 0.070 0.000 21.499 0.000 PyAutoFit/autofit/non_linear/fitness.py:764(__call__) + 9784 0.070 0.000 0.075 0.000 SP/numpy/_core/numeric.py:367(full_like) + 287 0.070 0.000 0.214 0.001 SP/matplotlib/artist.py:1435(get_aliases) + 1129 0.070 0.000 3.466 0.003 SP/dynesty/sampling.py:154(generic_random_walk) + 66908 0.069 0.000 0.069 0.000 SP/dynesty/utils.py:111(__float__) +40268/38608 0.068 0.000 0.507 0.000 STDLIB/contextlib.py:141(__exit__) + 64250 0.068 0.000 0.339 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1730(direct_prior_model_tuples) + 15 0.068 0.005 0.087 0.006 {built-in method _pickle.load} + 23782 0.066 0.000 0.066 0.000 SP/scipy/linalg/lapack.py:1062(_check_work_float) + 12195 0.066 0.000 0.077 0.000 SP/matplotlib/cbook.py:259(__init__) +4634/2886 0.065 0.000 0.344 0.000 STDLIB/inspect.py:2501(_signature_from_callable) + 1215 0.065 0.000 0.178 0.000 SP/matplotlib/ticker.py:819(_set_format) + 618 0.064 0.000 0.064 0.000 {built-in method builtins.dir} + 64280 0.063 0.000 0.330 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1752(direct_prior_tuples) + 3181 0.063 0.000 0.080 0.000 SP/numpy/lib/_shape_base_impl.py:621(column_stack) + 48462 0.063 0.000 0.063 0.000 {method 'set' of '_contextvars.ContextVar' objects} + 2639 0.063 0.000 0.149 0.000 SP/numpy/lib/_type_check_impl.py:373(nan_to_num) +18959/18919 0.062 0.000 0.182 0.000 PyAutoFit/autofit/mapper/model.py:65(wrapper) + 8794 0.062 0.000 0.117 0.000 SP/matplotlib/_api/__init__.py:147(check_shape) + 62153 0.062 0.000 0.062 0.000 {method 'rpartition' of 'str' objects} + 25226 0.062 0.000 0.325 0.000 SP/matplotlib/cbook.py:871(get_siblings) +32902/26456 0.061 0.000 0.077 0.000 SP/matplotlib/transforms.py:165(_invalidate_internal) + 9266 0.061 0.000 0.912 0.000 SP/matplotlib/markers.py:299(_set_marker) + 24098 0.061 0.000 0.143 0.000 SP/matplotlib/lines.py:1309(set_ydata) + 19954 0.061 0.000 0.174 0.000 {method 'all' of 'numpy.generic' objects} + 7272 0.061 0.000 0.061 0.000 SP/matplotlib/transforms.py:2918(_interval_contains_close) + 18575 0.061 0.000 0.141 0.000 SP/matplotlib/lines.py:1290(set_xdata) + 13995 0.060 0.000 0.060 0.000 {method 'search' of 're.Pattern' objects} + 119326 0.060 0.000 0.065 0.000 {method 'pop' of 'dict' objects} + 55007 0.059 0.000 9.304 0.000 SP/dynesty/sampler.py:294(update_bound_if_needed) + 8043 0.059 0.000 0.126 0.000 SP/matplotlib/transforms.py:1973(rotate) + 17664 0.058 0.000 0.096 0.000 SP/scipy/linalg/blas.py:395(getter) + 65748 0.058 0.000 0.473 0.000 SP/numpy/_core/_methods.py:67(_all) + 5645 0.058 0.000 0.080 0.000 SP/scipy/linalg/_misc.py:17(norm) +19122/19077 0.058 0.000 0.246 0.000 SP/matplotlib/transforms.py:1849(transform_affine) + 364318 0.058 0.000 0.058 0.000 STDLIB/typing.py:2187(cast) + 1407 0.057 0.000 1.183 0.001 SP/matplotlib/axis.py:1527(get_minorticklocs) + 406 0.057 0.000 1.640 0.004 PyAutoFit/autofit/graphical/factor_graphs/abstract.py:270(_numerical_factor_jacobian) + 17459 0.057 0.000 0.107 0.000 STDLIB/inspect.py:2743(__init__) + 11756 0.057 0.000 0.130 0.000 SP/psutil/__init__.py:478(oneshot) + 48222 0.057 0.000 0.134 0.000 SP/numpy/_core/_ufunc_config.py:456(__exit__) + 49092 0.057 0.000 0.107 0.000 SP/numpy/_core/numerictypes.py:289(issubclass_) + 1015 0.057 0.000 1.698 0.002 SP/scipy/stats/_distn_infrastructure.py:1148(stats) + 9519 0.056 0.000 0.084 0.000 SP/matplotlib/transforms.py:2041(scale) + 1561 0.056 0.000 0.056 0.000 {method 'argsort' of 'numpy.ndarray' objects} + 60 0.056 0.001 0.983 0.016 PyAutoFit/autofit/mapper/prior_model/abstract.py:2196(log_prior_list_from) + 8429 0.055 0.000 0.344 0.000 STDLIB/textwrap.py:419(dedent) + 36222 0.055 0.000 0.313 0.000 {method 'max' of 'numpy.ndarray' objects} +36128/18828 0.054 0.000 0.119 0.000 PyAutoFit/autofit/graphical/utils.py:131(nested_zip) + 32644 0.054 0.000 0.357 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1552() + 26847 0.054 0.000 0.400 0.000 SP/numpy/_core/fromnumeric.py:2589(all) + 4181 0.053 0.000 0.053 0.000 {method 'cumsum' of 'numpy.ndarray' objects} + 7921 0.053 0.000 0.134 0.000 SP/numpy/_core/_methods.py:235(_ptp) + 2148 0.052 0.000 1.313 0.001 {built-in method _functools.reduce} + 6427 0.052 0.000 0.885 0.000 PyAutoFit/autofit/messages/interface.py:275(sum_natural_parameters) + 8472 0.052 0.000 0.074 0.000 STDLIB/pathlib.py:358(__init__) + 2340/525 0.052 0.000 0.141 0.000 STDLIB/re/_parser.py:512(_parse) + 6081 0.052 0.000 0.288 0.000 SP/matplotlib/font_manager.py:656(__init__) + 5951 0.052 0.000 0.173 0.000 PyAutoFit/autofit/mapper/variable.py:305(__op__) + 30 0.051 0.002 50.124 1.671 SP/dynesty/sampler.py:920(run_nested) + 4792 0.051 0.000 0.093 0.000 {method '__exit__' of '_io._IOBase' objects} + 34065 0.050 0.000 0.126 0.000 SP/matplotlib/colors.py:219(_is_nth_color) + 19483 0.050 0.000 1.310 0.000 SP/matplotlib/artist.py:1239(set) + 47243 0.050 0.000 0.050 0.000 {method 'ravel' of 'numpy.ndarray' objects} + 9178 0.050 0.000 0.081 0.000 SP/numpy/_core/shape_base.py:80(atleast_2d) + 4237 0.050 0.000 0.959 0.000 SP/matplotlib/font_manager.py:1293(findfont) + 480 0.049 0.000 1.528 0.003 SP/dynesty/sampler.py:228(results) + 2634 0.049 0.000 0.425 0.000 SP/matplotlib/patches.py:800(get_patch_transform) + 34204 0.049 0.000 0.068 0.000 PyAutoFit/autofit/non_linear/samples/sample.py:13(__init__) + 25793 0.048 0.000 0.261 0.000 SP/matplotlib/artist.py:102(_stale_axes_callback) + 4387 0.048 0.000 0.113 0.000 SP/matplotlib/artist.py:1169(update_from) + 4138 0.048 0.000 0.109 0.000 STDLIB/pathlib.py:387(_parse_path) + 176885 0.048 0.000 0.048 0.000 {method 'strip' of 'str' objects} + 111052 0.048 0.000 0.048 0.000 SP/scipy/_lib/_array_api_override.py:69(array_namespace) + 3389 0.047 0.000 0.082 0.000 SP/numpy/_core/shape_base.py:220(vstack) + 85493 0.047 0.000 0.093 0.000 PyAutoFit/autofit/mapper/model.py:239() + 4692 0.047 0.000 0.169 0.000 SP/matplotlib/backend_bases.py:680(__init__) + 3344 0.047 0.000 2.786 0.001 SP/scipy/_lib/_util.py:291(wrapper) + 3707 0.047 0.000 0.047 0.000 SP/numpy/_core/getlimits.py:598(smallest_normal) + 21457 0.046 0.000 0.262 0.000 {method 'sum' of 'numpy.ndarray' objects} + 5890 0.046 0.000 0.059 0.000 SP/numpy/_core/numeric.py:1386(normalize_axis_tuple) + 25482 0.046 0.000 0.150 0.000 SP/matplotlib/font_manager.py:1251(score_weight) + 24620 0.046 0.000 0.282 0.000 {method 'min' of 'numpy.ndarray' objects} + 3111 0.046 0.000 0.080 0.000 SP/matplotlib/transforms.py:617(translated) + 30672 0.046 0.000 0.053 0.000 SP/yaml/reader.py:99(forward) + 287 0.045 0.000 0.146 0.001 SP/matplotlib/artist.py:1513(get_setters) + 4358 0.045 0.000 0.088 0.000 SP/matplotlib/lines.py:1158(set_linestyle) + 5241 0.045 0.000 0.045 0.000 {built-in method builtins.round} + 3344 0.045 0.000 0.087 0.000 SP/dynesty/bounding.py:190(major_axis_endpoints) + 114394 0.045 0.000 0.045 0.000 {built-in method _operator.index} + 30 0.044 0.001 0.056 0.002 SP/anesthetic/boundary.py:200(_kde_eval) + 1001 0.044 0.000 2.520 0.003 PyAutoFit/autofit/messages/truncated_normal.py:312(kl) + 2790 0.044 0.000 0.052 0.000 SP/matplotlib/ticker.py:1984(scale_range) + 1468 0.043 0.000 0.046 0.000 {built-in method posix.mkdir} + 3274 0.043 0.000 0.220 0.000 :1597(find_spec) + 1816 0.043 0.000 0.063 0.000 SP/numpy/_core/_methods.py:99(_clip) + 3142 0.043 0.000 0.105 0.000 PyAutoFit/autofit/messages/normal.py:179(calc_natural_parameters) + 6690 0.042 0.000 0.137 0.000 PyAutoFit/autofit/mapper/model.py:235(direct_tuples_with_type) + 1560 0.042 0.000 0.089 0.000 PyAutoFit/autofit/mapper/variable.py:285(__op__) + 2393 0.042 0.000 0.615 0.000 SP/matplotlib/artist.py:786(set_clip_path) + 126002 0.042 0.000 0.042 0.000 SP/matplotlib/artist.py:294(axes) + 53447 0.042 0.000 0.371 0.000 SP/numpy/_core/_methods.py:58(_any) + 17643 0.042 0.000 0.080 0.000 PyAutoFit/autofit/mapper/prior_model/collection.py:242(__setattr__) +7014/7012 0.041 0.000 0.471 0.000 SP/matplotlib/transforms.py:1473(transform) + 8731 0.041 0.000 0.489 0.000 SP/matplotlib/path.py:99(__init__) + 10522 0.041 0.000 0.117 0.000 SP/matplotlib/transforms.py:2342(__init__) + 19483 0.040 0.000 1.351 0.000 SP/matplotlib/artist.py:146() + 62649 0.040 0.000 0.055 0.000 PyAutoFit/autofit/mapper/prior_model/abstract.py:1014() + 35673 0.040 0.000 0.107 0.000 SP/scipy/linalg/lapack.py:1058() + 1215 0.040 0.000 0.148 0.000 SP/matplotlib/ticker.py:746(_compute_offset) + 4757 0.040 0.000 0.064 0.000 :71(join) + 17684 0.040 0.000 0.334 0.000 STDLIB/re/__init__.py:280(_compile) + 4293 0.040 0.000 0.056 0.000 STDLIB/inspect.py:3029(__init__) + 31997 0.040 0.000 0.061 0.000 PyAutoFit/autofit/messages/interface.py:25(shape) + 5999 0.040 0.000 0.446 0.000 SP/matplotlib/artist.py:1463(get_valid_values) + 47931 0.040 0.000 0.040 0.000 {built-in method sys.intern} + 2814 0.040 0.000 0.564 0.000 SP/matplotlib/ticker.py:214(format_ticks) + 7036 0.040 0.000 0.171 0.000 SP/matplotlib/markers.py:250(_recache) + 50554 0.039 0.000 0.045 0.000 SP/matplotlib/artist.py:725(get_figure) + 1152 0.039 0.000 0.408 0.000 SP/matplotlib/axis.py:2810(get_tick_space) +27266/27265 0.039 0.000 0.236 0.000 {method 'view' of 'numpy.ndarray' objects} + 24360 0.039 0.000 0.039 0.000 SP/scipy/_lib/array_api_extra/_lib/_funcs.py:160() + + diff --git a/draft/research/graphical_ep/ep_campaign.md b/draft/research/graphical_ep/ep_campaign.md index fbd6dbc2e..0281bda32 100644 --- a/draft/research/graphical_ep/ep_campaign.md +++ b/draft/research/graphical_ep/ep_campaign.md @@ -40,6 +40,7 @@ its own prompt file. Update the table as phases ship. | 1b | Confidence test on the #1405 collapse toy at N=50 (NUTS vs EP x3) | β†’ PyAutoCortex `projects/ep_toy_gaussian.md` | **born 2026-09-10** as Cortex science project `ep_toy_gaussian` (Cortex PR #29, human merge pending β€” `projects.yaml` is code). The campaign's last confidence test before scaling up: the *original* collapse toy from `complete/2026/07/ep_scale_collapse_assets/ep_toy_diagnostic.py`, model and EP settings verbatim (`DynestyStatic(nlive=100, rwalk)` per factor, `LaplaceOptimiser`, `EPHistory(kl_tol=0.05)`, `max_steps=20`), but at **N=50**, with a joint **BlackJAX NUTS** reference and **three EP repeats on identical data** β€” none of which this toy has ever had. A pass on the no-collapse / parity / self-agreement / honest-width criteria is the evidence that the D1–D6 + review-wave fixes cured PyAutoFit#1405 on its own toy; a failure isolates it to the Dynesty-per-factor EP path, since the analytic ensemble used Laplace factors. Task `State: ready`, witness pre-registered (7 criteria), **awaiting submission** | | 2 | Scatter-collapse cure or caveat | `complete/2026/09/ep-scale-collapse-basin-cure-or-caveat.md` | **SHIPPED 2026-09-02** β€” cure of the mechanism (#1558/#1560/#1562) + caveat (README Β§3.5); record `complete/2026/09/ep-scale-collapse-basin-cure-or-caveat.md`; cure follow-on filed `draft/feature/autofit/ep_hierarchical_scatter_moment_matching.md` (human decision). Close-out 2026-09-02: `complete/2026/09/ep-collapse-unpark.md` (autofit_workspace_test#94 / PR #95) curated `analytic_gaussian_collapse.py` into the smoke gate (RECOVER 5/5). **Codex review of the fixes shipped 2026-09-07** as bundle `ep-phase2-review`: PyAutoFit#1572 coupled-transform covariance in `from_mode` (`transformed-from-mode-coupled-covariance.md`), #1573 P1 deterministic variables kept cavity covariance on the fd-Hessian path (`ep-laplace-deterministic-hessian.md`), #1574 fully reverted projection counted as updated (`ep-full-revert-not-updated.md`), #1576 + autofit_workspace_test#98 per-(factor, variable) stale tracking with `reverted_variables` in `ep_history.csv` (`ep-stale-tracking-per-variable.md`) | | 3 | Graphical (non-EP) JAX scaling | β†’ PyAutoCortex `projects/slope_hierarchy_scale.md` (the ledger of project `slope_hierarchy_scale`; the measurement addendum is in `archive/tasks/slope_hierarchy_scale/n25_scale_up.md`) and `graphical_scoping.md` sub-tasks | **gated 2026-09-08** β€” a fresh Cortex science project `slope_hierarchy_scale` was born for it (Cortex PR #25, issue Cortex#24): the wrapped-up N=5 tree was vaulted to `Science/z_projects_complete/slope_hierarchy` and its row retired, the code borrowed into `Science/slope_hierarchy_scale`, and the task moved `planned β†’ gated` on `Gates: PyAutoFit#1405, #1558, #1560, #1562`. PR #25 **merged 2026-09-08** (merge `866d8f0`; issue Cortex#24 closed, record `complete/2026/09/slope-hierarchy-scale-birth.md`). Next: `/cortex` β†’ `move tasks/slope_hierarchy_scale/n25_scale_up.md ready` β†’ submits the N=25 runs | +| 1b/3 | Check-in (EP arms of 1b and 3) | β†’ PyAutoCortex `projects/ep_toy_gaussian.md`, `projects/slope_hierarchy_scale.md` | 2026-09-24: 343299 shows the Laplace hierarchical projection fails on every update at N=25 lensing; the moment-matching cure is now the blocking decision for phase 3's EP arm; ep_toy_gaussian wave 1 failed on infra (EMFILE, fixed by #1632/#1634), wave 2 awaits a human go. | | 4 | IC50 EP end-to-end + scale ladder | β†’ PyAutoCortex `projects/ic50_workspace.md` (the ledger of project `ic50_workspace`; dev companion stays in the Mind as `feature/autofit/ep_lbfgs_jax.md`) | **RUNNING ON RAL 2026-09-09 β€” parity at N=5 achieved.** The 2026-09-08 blockers (dirty checkout, no `results/` witness path, row `dormant`) are all cleared; Cortex row `active` and task `submitted` via PyAutoCortex PR #26 (human merge pending). Runs `342408` (EP, sim, nlive 150, max_steps 12, 56.7 s) and `342409` (graphical joint Dynesty, sim, nlive 150, 21.4 s), partition `ral`, against a mirror **verified to contain #1580** β€” so unlike phase 3's EP arm these carry the full D1–D6 wave. **Result: 33/33 within 3Οƒ for both methods, 0/33 cross-method disagreements** (`results/graphical_ep_comparison_sim.txt`). Caveats: N=5 only, the scale ladder is not started; EP's median Οƒ is still 2.3Γ— the graphical fit's on `hill_coef` (0.980 vs 0.423); and the gain over the archived `_v1` run confounds the D1–D6 fixes, nlive 50β†’150 and laptopβ†’RAL. Setup shipped as 5 commits on `feature/ep-phase4-ral-setup` (unpushed, public repo β€” see Phase 4 notes below). The companion dev prompt `draft/feature/autofit/ep_lbfgs_jax.md` is still open and is now the scale lever, not a blocker | | 5 | Diagnostics sufficiency checkpoint | no prompt yet β€” deliberate | judge after phases 2 & 4 produce real runs; the 2026-07 diagnostics wave (#1330/#1335) shipped and caught #1383; graphical_scoping sub-tasks 5–6 (summary JSON, dashboard) are the likely follow-ups; concrete item from phase 1–2: STALE = zero SUCCESS updates is now warned by the library (#1562); 2026-09-07: #1574/#1576 extended STALE to full reverts and to per-(factor, variable) tracking, and `ep_history.csv` gained `reverted_variables`; the BIASED-TIGHT guard calibration stays a human call | | 6 | Profiling: autofit_profiling repo + two epics | `research/autofit/autofit_profiling_bootstrap.md` | filed; repo creation human-gated | @@ -141,7 +142,7 @@ profiling) last, once end-to-end runs exist to profile. end-to-end models are the goal; adopt only if a genuinely simple change dramatically simplifies/speeds things. (`feature/autofit/ep_lbfgs_jax.md` covers the *factor-fit sampler*, which is allowed; this gate is about the - EP update maths itself.) β€” 2026-09-02: the moment-matching cure prompt is the first candidate for this gate. 2026-09-07: still the human's call (`Autonomy: supervised`); the phase-2 review bundle did not touch the update maths. + EP update maths itself.) β€” 2026-09-02: the moment-matching cure prompt is the first candidate for this gate. 2026-09-07: still the human's call (`Autonomy: supervised`); the phase-2 review bundle did not touch the update maths. 2026-09-24: 343299 shows the Laplace hierarchical projection fails on every update at N=25 lensing; the moment-matching cure is now the blocking decision for phase 3's EP arm; ep_toy_gaussian wave 1 failed on infra (EMFILE, fixed by #1632/#1634), wave 2 awaits a human go. - **Sampler-result reuse across EP passes** β€” complicated for efficiency-only gains; revisit via profiling epic 2 evidence (ep_scoping sub-task 6). - **Parallel factor updates on HPC** β€” revisit when scaled runs approach